私はこれに関する多くの記事を読んだことがありますが、私の問題は解決しません。別のJNI UnsatisfiedLinkError DLLの問題
私は、JavaプロセスがWindowsメッセージを送信できるようにする非常に小さなDLLを持っています。私はその後、私は不満のリンクエラーを取得VS2005でと/ MTとリンクし、すべての罰金ですが、私は私のDLLを作成しようとした場合MSVCRTに依存し、/ MDとリンクすることをコンパイルした
FindWindowEx(...)
SendMessage(...)
それは単に呼び出します。
ます。java.lang.UnsatisfiedLinkError:MYDLL.DLL:依存ライブラリ、2つの欠落のDLL、GPSVC.DLLとIESHIMS.DLLを持ってするDepends.exeするよる
を見つけることができません。最初はc:\ windows \ system32に存在し、2番目はwinsxsパスにあります。 c:\ windows \ system32からロードされた他のDLLのロードがあります.GPSVC.DLLはwin7x64マシンの管理者でも実行できません - それはそれに依存します -
はとにかく、私は(単純化 - 私はjava.library.pathのの制御ではないよ)で、私のJavaでこれらのDLLの両方の負荷を強制しようとした
Field field = ClassLoader.class.getDeclaredField("usr_paths");
field.setAccessible(true);
String[] paths = (String[]) field.get(null);
String[] tmp = new String[paths.length + 2];
System.arraycopy(paths, 0, tmp, 0, paths.length);
tmp[paths.length] = "c:/windows/system32";
tmp[paths.length + 1] = "c:/Windows/winsxs/amd64_microsoft-windows-ie-ieshims_31bf3856ad364e35_8.0.7601.17514_none_c06d7c9c27da8591";
field.set(null, tmp);
が、それは何の違いが行われていません。私はそれを静的にリンクさせるためにフォールバックすることができますが、私はむしろそうしたくありません。
私は次に何を試すことができますか? Antony
私はDLLの32ビット版と64ビット版の両方をビルドしており、必要に応じてx86またはamd64でvcvarsallを実行しています。私のCLコマンドラインは: cl/I%JAVA_HOME%\ include/I%JAVA_HOME%\ include \ win32/nologo/W4/EHsc/O2/D "NDEBUG"/D "WIN32"/D _USRDLL/MT/LD PresencePump.cpp /FePresencePump-%1.dll/link/subsystem:windows :上記の両方のDLLは/ MT静的リンクを使用して動作しますが、/ MD/D _AFXDLLを使用すると問題が発生します。 – adb