JNA - DLL中的访问方法

时间:2016-03-17 13:22:31

标签: jna

我是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);
    }
}

请帮忙。

1 个答案:

答案 0 :(得分:0)

您需要使用extern "C"编译代码,以便在没有C ++名称修改的情况下导出符号。

或者,您可以使用符号表中的名称作为函数查找名称(您需要使用FunctionMapper来获取特殊符号)。