将 LPARAM 转换为 Java-Pojo
Cast LPARAM to a Java-Pojo
我有一个 c 应用程序和一个 java 应用程序。我与 jna 通信以从 c 程序中获取结果。
我有一个 jna-Callback 函数:
public LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WinUserConstants.WM_GRAB_BASE:
System.out.println("WM_GRAB_BASE");
return new LRESULT(1);
case WinUserConstants.WM_GRAB_TRANSFER_FINISHED:
System.out.println("WM_GRAB_TRANSFER_FINISHED");
return new LRESULT(1);
case WinUserConstants.WM_GRAB_IMAGE_SAVED:
System.out.println("WM_GRAB_IMAGE_SAVED");
return new LRESULT(1);
default:
return User32.INSTANCE.DefWindowProc(hWnd, uMsg, wParam, lParam);
}
我需要 WPARAM 变量。我无法将 WPARAM 更改为字符串。如果我这样做,我的 window 显示没有控件。
WPARAM 定义为 "HGLOBAL on memory containing (wchar_t *)filename"。我需要那个文件名,但无法访问 C 代码。
您可以使用WPARAM.toPointer().getWideString(0)
来提取字符串。
toPointer()
有效地将 WPARAM "casts" 指向一个指针值,然后您可以从中提取(宽)本机 C 字符串。
我有一个 c 应用程序和一个 java 应用程序。我与 jna 通信以从 c 程序中获取结果。 我有一个 jna-Callback 函数:
public LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WinUserConstants.WM_GRAB_BASE:
System.out.println("WM_GRAB_BASE");
return new LRESULT(1);
case WinUserConstants.WM_GRAB_TRANSFER_FINISHED:
System.out.println("WM_GRAB_TRANSFER_FINISHED");
return new LRESULT(1);
case WinUserConstants.WM_GRAB_IMAGE_SAVED:
System.out.println("WM_GRAB_IMAGE_SAVED");
return new LRESULT(1);
default:
return User32.INSTANCE.DefWindowProc(hWnd, uMsg, wParam, lParam);
}
我需要 WPARAM 变量。我无法将 WPARAM 更改为字符串。如果我这样做,我的 window 显示没有控件。 WPARAM 定义为 "HGLOBAL on memory containing (wchar_t *)filename"。我需要那个文件名,但无法访问 C 代码。
您可以使用WPARAM.toPointer().getWideString(0)
来提取字符串。
toPointer()
有效地将 WPARAM "casts" 指向一个指针值,然后您可以从中提取(宽)本机 C 字符串。