在没有第三方库的Java中使用C#DLL

时间:2016-11-08 19:36:00

标签: java c# dll java-native-interface c++-cli

我有一个需要在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

Instance是一个静态字段,两个方法调用返回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;

也不起作用。

我很遗憾应该做些什么。我已经阅读了几个小时的帖子和例子而没有任何真正的成功任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设Instance成员是属性而不是字段,您可以尝试以下方式吗?

_private->myCSharpClass= MyDLL::MyCSharpClass::get_Instance()

在C#中,属性实际上是方法。