2013-03-13 139 views
3

我正在嘗試使用visual studio創建一個dll文件,並在Java項目中使用/訪問它。該庫似乎被加載,但總是拋出相同的異常: 線程「main」中的異常java.lang.UnsatisfiedLinkError:查找函數'function'時出錯:無法找到指定的過程。我的C/C++技能並不是最好的,所以問題可能在那裏。我試圖編輯h和cpp文件,使用類,名稱空間,靜態方法和網上找到的其他工作人員,但沒有做任何事情。 我也看過其他文章談論Depency Walker工具,但它無法打開我的dll,我也看到編譯器爲函數名添加了一些奇怪的後綴,因爲我知道可以通過使用「 estern'C'「在h或cpp文件中,但我無法使用。Java + JNA:找不到指定的程序

我的界面:

import com.sun.jna.Library; 
import com.sun.jna.Native; 

public interface SimpleDll extends Library { 

    SimpleDll instance = (SimpleDll) Native.loadLibrary("SimpleDll", SimpleDll.class); 

    void function(); 


} 

我的主類:

public class Test_Dll { 

    public static void main(String[] args) { 
     SimpleDll simpleDll = SimpleDll.instance; 

     simpleDll.function(); 
    } 
} 

我的.h文件:

#ifndef SIMPLEDLL 
#define SIMPLEDLL 

namespace simpeDll{ 


    static void function(); 


} 
#endif 

我的CPP文件:

#include "stdafx.h" 
#include "simpleDll.h" 
#include <stdexcept> 

using namespace simpeDll; 

static void function(){ 

} 
+1

你有沒有嘗試聲明你的函數爲extern「C」靜態void函數();在命名空間simpleDll之外? – 2013-03-13 23:36:22

+0

是的,我也試過沒有命名空間。我想在Visual Studio中有一個設置問題,因爲我發現我創建的庫是空的。我發現另一個工具來打開DLL,而令人驚訝的是,裏面沒有函數。 – Emaborsa 2013-03-14 07:44:24

回答

6
  1. 確保在simpleDll名稱空間外聲明您的函數。
  2. 確保裝飾它瓦特/ extern "C"
  3. 確保暴露你的功能__declspec(dllexport) void __cdecl function();或使用module definition file
+0

非常感謝!它的工作原理:) – Emaborsa 2013-03-14 19:24:21

+0

謝謝你,你是最好的!!!!!!!!!!!!!!!!!!!!!!!!! – Thomas 2013-09-26 16:09:37

相關問題