오류

2012-11-22 1 views
1

은 내가 사용하려고 : JNA와 자바오류

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

을하고 난 오류 점점 계속 :이 내 인터페이스는

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가 맞습니다. 내 실수는 어디 갔지?

+0

자바 32 비트 또는 64 비트 버전을 사용하고 있습니까? – Robert

+0

둘 다 설치되어 있다고 생각합니다. 어떻게 확인할 수 있습니까? – Dominik

+0

어떻게 프로그램을 실행합니까? – Robert

답변

6

해당 이름의 함수가 없기 때문에 JNA가 user32.dll에서 "SendMessage"기능을 찾을 수 없습니다.

SendMessage는 다른 컴파일러에서 일치하는 ANSI 또는 UNICODE 버전의 함수 (SendMessageASendMessageW)로 자동 매핑되기 때문에 발생합니다.

DependencyWalker와 같은 DLL의 내 보낸 기능을 보여주는 도구를 사용하면 Windows 7의 user32.dll은 예를 들어 SendMessageASendMessageW의 두 함수 만 알 수 있지만 SendMessage은 알 수 없습니다.

사용하는 함수 정의가 ANSI 버전과 비슷하므로 대신 SendMessageA을 사용해야합니다.

BTW. 32 비트 또는 64 비트 Java 및 user32.dll을 사용하는 경우에는 차이가 없습니다. 내가 쓴 것은 두 버전 모두에 해당됩니다.

+0

아 감사합니다! 그것은 작동하지만 ... 항상 0,0을 클릭하면 위치가 lParam 값으로 전송된다고 생각합니다. 어떤 형식이 적합한가요? – Dominik

+0

0x0201은 WM_LBUTTONDOWN이므로 다음 위치에서 설명서를 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx – Robert

+0

아니요. - 당신이 볼 수 있듯이 나는 이미 'clickevent'에 대한 올바른 가치를 가지고 있습니다. – Dominik