我有一个需要在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#中,属性实际上是方法。

10-06 02:38