这些是winapi方法
ATOM WINAPI RegisterClassEx(
_In_ const WNDCLASSEX *lpwcx
);
typedef struct tagWNDCLASSEX {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;
我的Java代码:
public class WNDCLASSEX extends com.sun.jna.Structure {
public int cbSize;
public int style;
public WNDPROC lpfnWndProc;
public int cbClsExtra;
public int cbWndExtra;
public HMODULE hInstance;
public HICON hIcon;
public HCURSOR hCursor;
public HBRUSH hbrBackground;
public String lpszMenuName;
public String lpszClassName;
public HICON hIconSm;
}
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
Atom RegisterClassExW(WNDCLASSEX wc);
}
public class other {
public static void main(String[] args){
User32.WNDPROC WndProc = new User32.WNDPROC() {
public LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam)
{
int id = User32.INSTANCE.GetWindowThreadProcessId(hWnd, null);
return new LRESULT(0);
}
};
WNDCLASSEX wc = new WNDCLASSEX();
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = null;
wc.hIcon = null;
wc.hbrBackground = null;
wc.cbSize= wc.size();
wc.lpszMenuName = null;
wc.lpszClassName = "Magnifier";
Atom atom = User32.INSTANCE.RegisterClassExW(wc);
}
}
如果调用RegisterClassEx(wc)
方法,则会出现以下错误。我认为问题是由于wc
一个对象但RegisterClassExW
接受了指针。
如果是这种情况,如何wc
作为指针发送?其他如何解决此问题?
错误是
线程“主”中的异常java.lang.IllegalArgumentException:函数RegisterClassExW的参数0处不支持的参数类型jna.extra.WNDCLASSEX
WNDCLASSEX
需要扩展Structure
,然后您需要实现其getFieldOrder()
方法。
public class WNDCLASSEX extends com.sun.jna.Structure {
public int cbSize;
public int style;
public WNDPROC lpfnWndProc;
public int cbClsExtra;
public int cbWndExtra;
public HMODULE hInstance;
public HICON hIcon;
public HCURSOR hCursor;
public HBRUSH hbrBackground;
public String lpszMenuName;
public String lpszClassName;
public HICON hIconSm;
public List getFieldOrder() {
return Arrays.asList("cbSize","style","lpfnWndProc","cbClsExtra","cbWndExtra","hInstance","hIcon","hCursor","hbrBackground","lpszMenuName","lpszClassName","hIconSm");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句