为什么对winapi RegisterClassExW的调用失败(使用JNA)?

毗湿奴

这些是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么对winapi GetWindowPlacement的调用失败(使用JNA)?

来自分类Dev

为什么WinAPI FormatMessage失败,总是返回false

来自分类Dev

WinAPI为什么不使用配置的大小创建窗口?

来自分类Dev

为什么需要使用“ WINAPI *”作为语法来为DLL中的函数声明函数指针

来自分类Dev

什么是winapi HMENU,如何使用?

来自分类Dev

将 EvtQuery 与 winapi crate 一起使用时,为什么会出现 ERROR_INVALID_PARAMETER?

来自分类Dev

为什么系统调用失败?

来自分类Dev

为什么在Googletest中调用`mkdtemp()`失败?

来自分类Dev

为什么从Makefile调用diff失败?

来自分类Dev

为什么存在 CopyRect WinAPI 函数?

来自分类Dev

为什么直接调用JUnit测试会通过,但是使用Maven调用时会失败?

来自分类Dev

为什么规格失败?

来自分类Dev

为什么mmap失败?

来自分类Dev

为什么规格失败?

来自分类Dev

为什么CryptImportKey失败?

来自分类Dev

为什么会失败?

来自分类Dev

SED失败,为什么?

来自分类Dev

Jsonresult在我的Ajax调用中使用参数失败。为什么会这样呢?

来自分类Dev

为什么使用模拟类中另一个函数调用的函数的测试失败?

来自分类Dev

为什么使用“ Me”时对类模块私有子集的调用失败?

来自分类Dev

Jsonresult在我的Ajax调用中使用参数失败。为什么会这样呢?

来自分类Dev

为什么在使用 Pool.apply_async 调用时传递队列会导致此函数失败?

来自分类Dev

函数在使用 XMLHttpRequest 从函数调用时按预期工作,但在使用 EventSource 从函数调用时失败。为什么是这样?

来自分类Dev

为什么使用-XSafe时runghc失败?

来自分类Dev

为什么使用xpath获取属性失败?

来自分类Dev

Python 结构,为什么 grep 使用 [] 失败

来自分类Dev

使用 'watch' 的 Bash 脚本失败。为什么?

来自分类Dev

为什么使用 terser 构建 heroku 失败

来自分类Dev

为什么要调用?

Related 相关文章

  1. 1

    为什么对winapi GetWindowPlacement的调用失败(使用JNA)?

  2. 2

    为什么WinAPI FormatMessage失败,总是返回false

  3. 3

    WinAPI为什么不使用配置的大小创建窗口?

  4. 4

    为什么需要使用“ WINAPI *”作为语法来为DLL中的函数声明函数指针

  5. 5

    什么是winapi HMENU,如何使用?

  6. 6

    将 EvtQuery 与 winapi crate 一起使用时,为什么会出现 ERROR_INVALID_PARAMETER?

  7. 7

    为什么系统调用失败?

  8. 8

    为什么在Googletest中调用`mkdtemp()`失败?

  9. 9

    为什么从Makefile调用diff失败?

  10. 10

    为什么存在 CopyRect WinAPI 函数?

  11. 11

    为什么直接调用JUnit测试会通过,但是使用Maven调用时会失败?

  12. 12

    为什么规格失败?

  13. 13

    为什么mmap失败?

  14. 14

    为什么规格失败?

  15. 15

    为什么CryptImportKey失败?

  16. 16

    为什么会失败?

  17. 17

    SED失败,为什么?

  18. 18

    Jsonresult在我的Ajax调用中使用参数失败。为什么会这样呢?

  19. 19

    为什么使用模拟类中另一个函数调用的函数的测试失败?

  20. 20

    为什么使用“ Me”时对类模块私有子集的调用失败?

  21. 21

    Jsonresult在我的Ajax调用中使用参数失败。为什么会这样呢?

  22. 22

    为什么在使用 Pool.apply_async 调用时传递队列会导致此函数失败?

  23. 23

    函数在使用 XMLHttpRequest 从函数调用时按预期工作,但在使用 EventSource 从函数调用时失败。为什么是这样?

  24. 24

    为什么使用-XSafe时runghc失败?

  25. 25

    为什么使用xpath获取属性失败?

  26. 26

    Python 结构,为什么 grep 使用 [] 失败

  27. 27

    使用 'watch' 的 Bash 脚本失败。为什么?

  28. 28

    为什么使用 terser 构建 heroku 失败

  29. 29

    为什么要调用?

热门标签

归档