2016-11-08 75 views
3

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

回答

1

假設Instance成員是屬性而不是字段,您可以嘗試以下方法嗎?

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

在C#屬性實際上是方法。

+0

我相當肯定我嘗試過無濟於事。我要去嘗試,然後有一個嚴重的認識。我無法遠程進入我的工作站,因爲它已關閉,我的團隊成員正在休假。 – GuardTheSun

相關問題