JNA - externe DLL - Funktion

condor99

Grünschnabel
Hallo,

ich versuche gerade eine externe DLL (C++) zu benutzen. Dafür habe ich mir ein interface geschrieben das extends von com.sun.jna.Library ist. Mit Native.loadLibrary lade ich die DLL und wrappe da auch die Funktionen. Funktioniert soweit recht gut.
Mein Problem ist nun eine Funktion erwartet einen Windowshandle (HWND) weil sie in diesen mit PostMessage Nachrichten schreibt.
An den HWND komme ich mit
HWND hwnd = new HWND();
Pointer ptr = Native.getWindowPointer(frame);
hwnd.setPointer(ptr);
aber wie bekomme ich nun die Nachrichten? Wo oder wie hänge ich da einen Listener ran?
So wie ich das sehe sollte da über callBack gehen. Dazu habe ich folgendes implementiert

interface MyUser32 extends User32 {

public static final MyUser32 USER32_INSTANCE = (MyUser32) Native.loadLibrary("user32", MyUser32.class, W32APIOptions.UNICODE_OPTIONS);

public static final int GWLP_WNDPROC = -4;

public int SetWindowLong(WinDef.HWND hWnd, int nIndex, Callback callback);

}

interface MyListener extends StdCallCallback {
public final int WM_USERMESSAGE = 0x7000; // mit dieser ID werden die Messages gepostet

public LRESULT callback(HWND hWnd, int uMsg, WPARAM uParam, LPARAM lParam);

}

MyListener listener = new MyListener() {
@Override
public LRESULT callback(HWND hWnd, int uMsg, WPARAM uParam, LPARAM lParam) {
System.out.println("callback MSG >" + uMsg + "<");
if(uMsg == WM_USERMESSAGE) {
System.out.println(" WPARAM >" + uParam.toString() + "< LPARAM >" + lParam.toString() + "<");
wndDebug.setText(wndDebug.getText() + "\n" + lParam.toString());
return new LRESULT(0);
}
return User32.INSTANCE.DefWindowProc(hWnd, uMsg, uParam, lParam);
}
};

MyUser32.USER32_INSTANCE.SetWindowLong(hwnd, MyUser32.GWLP_WNDPROC, listener);

aber ich bekomme die PostMessages nicht. :)
Wer kann mir helfen?
 
Zuletzt bearbeitet:
Zurück