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

问题描述:

我有一个需要在Java中使用的C#dll。该dll附带一个.chm文件,概述了类的方法/字段。在做完研究之后,我决定最好的方法是创建一个C++ cli包装器,并从那里使用JNI来获得我需要的Java。在没有第三方库的情况下使用Java中的C#DLL

类被设计为使用的方法是像

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; 

也不起作用。

我很迷茫什么去做。我读了几个小时的帖子和例子,但没有取得任何真正的成功任何帮助将非常感激。

+1

你能更具体地说明为什么'myCSharpClass = MyDLL :: MyCSharpClass :: Instance;'不起作用吗? –

+0

当我实例化MyCSharpClassWrapper以在JNI方法中使用时,Java中的调用导致JVM崩溃。我不记得它说的确切消息。 – GuardTheSun

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

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

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

+0

我相当肯定我尝试过无济于事。我要去尝试,然后有一个严重的认识。我无法远程进入我的工作站,因为它已关闭,我的团队成员正在休假。 – GuardTheSun