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



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()); } });

相关内容

  • 没有找到相关文章

最新更新