Linux と Mac でライブラリを正常にコンパイルし、Java Native Access で使用しました。残念ながら、Visual Studio のコンパイラと Java Native Access では何も動作しないようです。
基本に戻って、Visual Studio で Java Native Access が動作する超単純な dll を作成しようとしています。
GimmeFiveDll.c は次のとおりです。
__declspec(dllexport) int gimmeFive()
{
return 5;
}
SystemLibrary.java は次のとおりです。
import com.sun.jna.Native;
public class SystemLibrary {
public static final SystemLibrary instance = new SystemLibrary();
static {
Native.register("GimmeFiveDll");
}
public native int gimmeFive();
}
私はすでに Visual Studio で呼び出しインターフェイスを stdcall に切り替えようとしました。新しいプロジェクト ウィザードの空のプロジェクト dll win32 コンソールの既定値から他の変更を加えていません。上記の例では、結果の dll は に従って関数を正しくエクスポートしませんdumpbin.exe /exports
。私の実際のプロジェクトはそれらを正しくエクスポートしますが、いずれにしても常に同じ JNA 例外が発生します。
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'GimmeFiveDll': The specified module could not be found.
(はい、GimmeFiveDll.dll を System32 に入れました。はい、JNA を使用して、Windows に付属する System32 の他の dll にアクセスできます)。
JNAが好むVisual Studioによって作成されたDLLのこの最小限の例を完成させるのを手伝ってくれる人はいますか?
大変感謝します。