0

私は初心者のjnJNAであり、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 に答える