我有一个需要在Java中使用的C#dll。该dll带有.chm文件,该文件概述了类的方法/字段。经过研究,我决定最好的方法是创建一个C++ cli包装器,并从那里使用JNI来获得Java所需的东西。
设计类使用的方式就像
MyCSharpClass myC = MyCSharpClass.Instance; //Instance is a static field of MyCSharpClass
myC.setState("ON"); // Accepts a string, returns an int
myC.getNetwork(); // Returns a string
实例是一个静态字段,调用这两个方法返回int。
我试图根据以下示例创建包装器:http://pragmateek.com/using-c-from-native-c-with-the-help-of-ccli-v2/
使用JNI从Java调用C++ cli DLL时,我没有任何问题,除了当我尝试在C++ cli中从C#实例化类实例时,JVM崩溃了。
_private->myCSharpClass= gcnew MyDLL::MyCSharpClass();
不起作用,因为该类没有构造函数,并且
_private->myCSharpClass= MyDLL::MyCSharpClass::Instance;
也不起作用。
我对所做的事情很迷茫。我已经阅读了数小时的帖子和示例,但没有任何真正的成功。任何帮助将非常感激。
最佳答案
假设Instance
成员是属性而不是字段,您可以尝试以下方法吗?
_private->myCSharpClass= MyDLL::MyCSharpClass::get_Instance()
在C#中,属性实际上是方法。