2012-09-27 37 views
0

我正在使用第三方dll(比如說abc.dll)的Java項目。所以我使用JNI創建了一個本地頭文件。在JNI創建的dll中使用dll的問題

然後,我在VS2005上創建了一個dll項目(典型的win32應用程序),並添加了由JNI創建的頭文件。我爲該項目選擇了clr舊語法支持並添加了abc.dll作爲我的項目的參考。

到目前爲止,一切都很好。這是問題。我使用abc.dll中的一些方法實現了頭文件中定義的方法。 abc.dll有一個名爲「ABC」類,這就是我做的:

abc *abcObj = new abc(); abcObj->callSomeMethod(); 

我需要構建從解決方案,一切正常。但是當我運行我的Java程序時,JVM發現錯誤,告訴本機代碼崩潰了!!?!我調試了它,問題出現在new()中。它根本無法實例化abcObj。

然後我嘗試了一個使用該abc.dll的C++應用程序。有效。

我認爲JNI或託管/非託管事物必定存在問題。我在c/C++方面並不是很有經驗,所以我不太瞭解(至少現在我沒有時間理解)。我唯一要做的就是創建一個使用第三方DLL的包裝器DLL,並在我的Java應用程序中使用包裝器DLL。

任何幫助將不勝感激。

在此先感謝...

-haydar

編輯:我由我的第三方的dll所需的所有DLL。

+0

所有這些工作所需的DLL的任何機會都不在加載路徑中嗎? IE瀏覽器。如果您的JNI所需的DLL無法從工作目錄,PATH環境變量或windows和system32文件夾中加載,則會出現此錯誤。 – WhozCraig

+0

我擔心你會*需要花一些時間對JNI進行基本的瞭解:-)我將從一個非常簡單的方法開始:將第三方dll放在一邊,然後實現一個方法,例如返回兩個整數。一旦這個工作,你可以擴展它所有必要的方法,並添加你的第三方DLL。 –

+1

@Andreas絕對是這樣。當你的年齡足夠大時,從小處着手,征服世界。 – WhozCraig

回答

1

我已經解決了這個問題。問題是我創建的項目是一個win32應用程序,然後選擇dll。我創建了一個clr應用程序,一切都很順利。我遵循here的說明。