私は可能な重複を参照してこの問題を解決しようとしましたが、どれも役立たないようです。"native"を使用したJavaでのWindows API呼び出しの使用
私は現在のWindowsユーザー名とネイティブWindows MessageBoxを取得するためにJavaのWin APIメソッドを呼び出すために使用しているコードですが、私のコードでnative
メソッドを見つけることができないことを示すUnsatisfiedLinkError
私は電話しようとしている。
public class TestNative
{
public static void main(String[] args)
{
long[] buffer= { 128 };
StringBuffer username = new StringBuffer((int)buffer[0]);
GetUserNameA(username,buffer);
System.out.println("Current User : "+username);
MessageBoxA(0,"UserName : "+username,"Box from Java",0);
}
/** @dll.import("ADVAPI32") */
static native void GetUserNameA(StringBuffer username,long[] buffer);
/** @dll.import("USER32") */
private static native int MessageBoxA(int h,String txt,String title,int style);
}
JavaのネイティブWindowsメソッドを呼び出す方法は、(比較的単純な)可能性があります。私はそれがJavaがクロスプラットフォーム言語であるというまさにその理由を打ち砕くだろうが、私はWindowsでJavaで開発するプロジェクトに取り組む必要がある。
ありがとうございました。
アップデートは
デビッドHeffernanのが示唆したように、私はMessageBoxA
にMessageBox
のメソッドシグネチャを変更しようとしましたが、まだそれは働いていません。
まあ、私が開発しようとしているアプリケーションの目的ではないのですが、これは上記の方法で 'native'を使ってAPI関数を呼び出すことができるかどうかをテストすることです。 – Kushal
ああ、私はそれがあなたの最終目標であると仮定してはいけません。私はまだ正確に一致しない署名が問題であると疑う。私の興味は今盛り込まれているので、私はそれを試しに行くつもりです。 – Corbin
新しい機能でなければ、ラッピングコードを書く必要があると思われます。 JNIの動作を調べた後、ライブラリにJava対応のコードがなくてもDLL内の関数を直接呼び出す方法はないと思います。 – Corbin