2012-08-27 57 views
0

我是新手jn JNA,並且對java和C++的混合有點困惑。在WNDPROC回調方法中,發送到回調函數的LPARAM必須用於檢索DEV_BROADCAST_DEVICEINTERFACE類對象。這是我的代碼:JNA - 如何將LPARAM指針轉換爲Class對象?

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

您不必使用LPARAM;如果您通過本機代碼傳遞結構(或其他特定類型),則可以定義適當的方法簽名,而JNA將做正確的事情,將本機值轉換爲Java中有用的內容。

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