VM引数を使用してJavaクラスを実行する必要があります。私はJavaアプリケーションからloadLibrary(thirtパーティDLL)を試しています。そのためには、java.library.path jvm arguementを設定する必要があります。私は次のアプローチを試みました。UnsatisfiedLinkError - Djava.library.path
"C:\Program Files (x86)\Java\jdk1.8.0_92\bin\java" -Djava.library.path=C:\DLL TestMyProgram
私は、上記のコマンドでは、完全な32ビットJDKのパスを指定するThatsなぜ64ビットAMDプラットフォーム上で32ビットのDLLを実行しています。ここで
私は例外
java.lang.UnsatisfiedLinkError: TestMyProgram.group(Ljava/lang/String;Z)Ljava/lang/String;
java.library.pathにはpreperly最初のコマンドで設定されていない理由はわからないの下に取得しています実行中。どんな助けでも大歓迎です。
は、ここでは、ネイティブのAPIが実装され、mydll.dll
でエクスポートされていることを確認する必要があり、私のプログラム例外がString outStr = group(sb.toString(), false);
からthrowedされている場合は
public class TestMyProgram {
static
{
try {
System.loadLibrary("mydll");
} catch (UnsatisfiedLinkError e) {
System.out.println("Library not loaded" + e);
}
}
public static native String group(String msg, boolean isOracle);
public static void main(String args[]) {
StringBuffer sb = new StringBuffer();
sb.append("mymessage");
System.out.println("input \n : " + sb.toString());
String outStr = group(sb.toString(), false);
System.out.println(new Date());
System.out.println(outStr);
System.out.println(new Date());
}
}
'ライブラリがロードされていません 'というトレースが表示されない場合は、DLLがロードされているように見えます。例外メッセージは、適切なエントリポイントがdllに見つかりません。あなたはそれを輸出しましたか?それは正しい署名を持っていますか? – cma