JNA - 如何将LPARAM指针转换为Class对象?

时间:2012-08-27 11:41:08

标签: jna

我是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转换为类对象时,编译器开始抱怨,原因很明显。我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

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

public LRESULT callback(HWND hWnd, int uMSG, WPARAM uParam, User32.DEV_BROADCAST_DEVICEINTERFACE lParam);