我是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转换为类对象时,编译器开始抱怨,原因很明显。我如何实现这一目标?
答案 0 :(得分:1)
您不必使用LPARAM;如果您通过本机代码传递结构(或其他特定类型),您可以定义适当的方法签名,JNA将做正确的事情,将原生值转换为Java中有用的东西。
public LRESULT callback(HWND hWnd, int uMSG, WPARAM uParam, User32.DEV_BROADCAST_DEVICEINTERFACE lParam);