2016-03-17 47 views
0

Im新的JNA。我試圖訪問一個DLL中的方法。我收到以下錯誤JNA - DLL中的訪問方法

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'GetACSStatus': The specified procedure could not be found. 
    at com.sun.jna.Function.<init>(Function.java:179) 
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:347) 
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:327) 
    at com.sun.jna.Library$Handler.invoke(Library.java:203) 
    at com.sun.proxy.$Proxy0.GetACSStatus(Unknown Source) 
    at TestJNA.main(TestJNA.java:17) 

下面是代碼:

public class TestJNA { 
    public interface simpleDLLTest extends Library { 
     simpleDLLTest INSTANCE = (simpleDLLTest) Native.loadLibrary("IMV1", simpleDLLTest.class); 
     public NativeLong GetACSStatus(); 
    } 

    public static void main(String[] args) { 

     simpleDLLTest sdll = simpleDLLTest.INSTANCE; 

     NativeLong result1 = sdll.GetACSStatus(); // calling function 
     System.out.println("GetACSStatus(): " + result1); 
    } 
} 

請幫助。

+0

[depend.exe](http://depenencywalker.com)說你的函數名是什麼? – technomage

+0

在Dependency Walker中,函數名稱爲'?GetACSStatus @ IMV_CameraInterface @@ QAEKXZ' – Nini

回答

0

您需要使用extern "C"編譯代碼,以便符號不會導致C++名稱變形。

或者,您可以使用符號表中的名稱作爲函數查找名稱(您需要使用FunctionMapper來獲取特殊符號)。

+0

謝謝。我們能夠使用Wrapper調用該方法。 – Nini