我使用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
我不确定命名。我是否还必须添加_
?
答案 0 :(得分:2)
您的DLL使用stdcall调用约定,该约定通常具有编译器mangle函数名称以包含参数'堆栈大小。在加载库时(或重新编译库以使用未修饰的名称),您需要使用StdCallFunctionMapper
作为Library.OPTION_FUNCTION_MAPPER
选项传入。
Library.loadLibrary("myLib", myLib.class, new HashMap() { { put(Library.OPTION_FUNCTION_MAPPER, new StdCallFunctionMapper()); } });