任何DLL导入都会引发UnsatisfiedLinkError,尽管似乎加载了DLL

时间:2012-05-20 09:03:51

标签: java dll methods import jna

我使用Eclipse Java 32Bit JDK。我正在尝试导入一个32位DLL,我只有很少的文档。我正在使用com.sun.jna。 文档告诉我在没有任何参数的情况下调用方法InitImagerIPC

在此example我创建了一个界面:

public interface ImagerIPC extends com.sun.jna.win32.StdCallLibrary{ 
  HRESULT InitImagerIPC ();
}

当我尝试导入DLL时,不会发生错误。

ImagerIPC lib = (ImagerIPC) Native.loadLibrary ("ImagerIPC", ImagerIPC.class);

但如果我输入错误的DLL名称,我会收到UnsatisfiedLinkError。所以我猜它正确加载了?

但是当我试着打电话时

lib.InitImagerIPC();

我得到UnsatisfiedLinkError。 :( 哪里出错了?

BTW:DLL导出查看器为所需方法提取此信息:

_InitImagerIPC@0    0x10001fc0  0x00001fc0  45 (0x2d)   
    ImagerIPC.dll   J:\<my Path>\ImagerIPC.dll  Exported Function

我不确定命名。我是否还必须添加_

1 个答案:

答案 0 :(得分:2)

您的DLL使用stdcall调用约定,该约定通常具有编译器mangle函数名称以包含参数'堆栈大小。在加载库时(或重新编译库以使用未修饰的名称),您需要使用StdCallFunctionMapper作为Library.OPTION_FUNCTION_MAPPER选项传入。

Library.loadLibrary("myLib", myLib.class, new HashMap() { { put(Library.OPTION_FUNCTION_MAPPER, new StdCallFunctionMapper()); } });