I use Eclipse Java 32Bit JDK.我正在尝试导入一个 32 位 DLL,我得到的文档很少。我正在使用com.sun.jna
.文档告诉我在没有任何参数的情况下调用该方法InitImagerIPC
。
在本例中,我创建了一个接口:
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
. :(错误在哪里?
顺便说一句:DLL 导出查看器为所需方法提取此信息:
_InitImagerIPC@0 0x10001fc0 0x00001fc0 45 (0x2d)
ImagerIPC.dll J:<my Path>ImagerIPC.dll Exported Function
我不确定命名。 我还必须添加_
吗?
DLL 使用 stdcall 调用约定,该约定通常具有编译器 mangle 函数名称以包含参数的堆栈大小。 加载库时,需要使用传入的StdCallFunctionMapper
作为Library.OPTION_FUNCTION_MAPPER
选项传递(或重新编译库以使用未修饰的名称(。
Library.loadLibrary("myLib", myLib.class, new HashMap() { { put(Library.OPTION_FUNCTION_MAPPER, new StdCallFunctionMapper()); } });