0

EclipseJava32ビット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);

しかしUnsatisfiedLinkError、DLL名を間違って入力すると、が表示されます。正しくロードされていると思いますか?

しかし、私が電話しようとすると

lib.InitImagerIPC();

取得しUnsatisfiedLinkErrorます。:(間違いはどこにありますか?

ところで:DLLエクスポートビューアは、必要なメソッドについて次の情報を引き出します。

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

ネーミングがわかりません。また、追加する必要があり_ますか?

4

1 に答える 1

2

DLLはstdcall呼び出し規約を使用します。これには通常、引数のスタックサイズを含めるためのコンパイラマングル関数名が含まれています。ライブラリをロードするとき(または、装飾されていない名前を使用するようにライブラリを再コンパイルするときStdCallFunctionMapper)、オプションとして渡されたものを使用する必要があります。Library.OPTION_FUNCTION_MAPPER

Library.loadLibrary("myLib", myLib.class, new HashMap() { { put(Library.OPTION_FUNCTION_MAPPER, new StdCallFunctionMapper()); } });
于 2012-05-21T12:00:04.213 に答える