将 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 字符串。