1

私は使用しようとします:

LRESULT WINAPI SendMessage(_In_  HWND hWnd, _In_  UINT Msg,
                           _In_  WPARAM wParam, _In_  LPARAM lParam);

Javaでjnaを使用すると、エラーが発生し続けます:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up function 'SendMessage'

これは私のインターフェースです:

public interface User32 extends StdCallLibrary {
Pointer GetForegroundWindow();
int SendMessage(Pointer hWnd, int msg, int num1, int num2);

そして私はそれを次のように呼びます:

Pointer hW = user32.GetForegroundWindow();
user32.SendMessage(hW, 0x0201, 0, 0);
user32.SendMessage(hW, 0x0202, 0, 0);

hWndは正しいです。私の間違いはどこですか?

4

1 に答える 1

7

その名前の関数がエクスポートされていないため、JNA は user32.dll で関数「SendMessage」を見つけることができません。

これは、SendMessage が古い名前であり、他のコンパイラによって一致する ANSI または UNICODE バージョンの関数に自動的にマップされるためです - SendMessageAand SendMessageW.

SendMessageADependencyWalker などの DLL のエクスポートされた関数を表示するツールを使用すると、たとえば、Windows 7 の user32.dll は関数との両方しか認識してSendMessageWいないことがわかりますSendMessage

使用する関数定義は ANSI バージョンのように見えるため、代わりに使用する必要がありますSendMessageA

ところで。32 ビットまたは 64 ビットの Java と user32.dll を使用している場合、違いはありません。私が書いたことは、両方のバージョンに当てはまります。

于 2012-11-22T14:08:43.853 に答える