JNI - 本机方法的例外

Dus*_*usk 2 java eclipse dll java-native-interface

我正在尝试在eclipse中的java应用程序中使用dll,但每当我尝试调用与该dll相关联的任何方法时,我都会遇到运行时异常.

dll存在于以下地址中,我在eclipse 中的运行/调试设置中传递了该地址:

-Djava.library.path="C:\Program Files\NPortAdminSuite\ipserial\lib\x86;${env_var:PATH}"
Run Code Online (Sandbox Code Playgroud)

码:

class Test {

  public native int nsio_init();

  public static void main(String[] args) {
          System.loadLibrary("ipserial");
          new Test().nsio_init(); //This part is throwing an exception
  }
}
Run Code Online (Sandbox Code Playgroud)

错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: NPortConnection.nsio_init()I
    at Test.nsio_init(Native Method)
    at Test.main(Test.java:27)
Run Code Online (Sandbox Code Playgroud)

该命令dumpbin /exports "C:\Program Files\NPortAdminSuite\ipserial\lib\x86\IPSerial.dll"还返回我的方法名称,我试图从该DLL调用 在此输入图像描述

谁能告诉我们如何解决这个问题?

dac*_*cwe 5

看起来你试图直接从java代码调用一个DLL函数.这是不可能的(直接).您需要编写一个在java和本机dll之间进行转换的层.

看看这些资源:


另一种解决问题的方法是使用JNA,例如查看维基百科文章.