0

我是 jn JNA 的新手,对 java 和 C++ 的混合感到有点困惑。在 WNDPROC 回调方法中,LPARAM 被发送到回调必须用于检索 DEV_BROADCAST_DEVICEINTERFACE 类对象。这是我的代码:

    public static User32.WNDPROC WndProc = new User32.WNDPROC() {    
        @Override     
        public LRESULT callback(HWND hWnd, int uMSG, WPARAM uParam, LPARAM lParam)    
        {
             User32.DEV_BROADCAST_DEVICEINTERFACE b = (User32.DEV_BROADCAST_DEVICEINTERFACE)      lParam;                                      

             if(b != null){ 
                 System.out.println("Device Name: " + b.dbcc_name.toString ());           System.out.println("New Volume GUID:" +     b.dbcc_classguid.toString());
             }
        }

当我尝试将 lParam 转换为类对象时,编译器开始抱怨,原因很明显。我如何实现这一目标?

4

1 回答 1

1

您不必使用 LPARAM;如果本机代码向您传递了一个结构(或其他特定类型),您可以定义适当的方法签名,JNA 会做正确的事情,将本机值转换为 Java 中有用的东西。

public LRESULT callback(HWND hWnd, int uMSG, WPARAM uParam, User32.DEV_BROADCAST_DEVICEINTERFACE lParam);
于 2012-08-27T15:38:50.547 回答