VC++でこのような処理で、USBデバイスの抜き差しを監視しています。
とあるVC++のDLLを用いており、DLLにWPARAMとLPARAMを渡す処理を書いています。
VC++
1BEGIN_MESSAGE_MAP() 2 ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange) 3END_MESSAGE_MAP() 4 5OnDeviceChange(WPARAM wParam, LPARAM lParam) 6{ 7 //何かしらの処理 8 HOGEHOGE(wParam, lParam); 9}
上記をVC#で書き換えようと考えており、VC#からVC++のDLLを[DLLImport]で呼び出せることが分かり、以下のコードでUSBデバイスの抜き差しを監視しようとしました。
しかし、どうも引数で渡されてくるMessageオブジェクトのlParamの値が、VC++でのLPARAMの値と違っているようなのです。
VC#
1enum WINDOW_MESSAGES : uint 2{ 3 WM_DEVICECHANGE = 0x0219, 4} 5protected override void WndProc(ref Message m) 6{ 7 switch ((WINDOW_MESSAGES)m.Msg) 8 { 9 case WINDOW_MESSAGES.WM_DEVICECHANGE: 10 //何かしらの処理 11 break; 12 } 13}
そもそも、VC#での監視のやり方が間違っているのか、
LPARAMの扱い方が変わっているのか、正直さっぱりです。
どうにかして、VC#でVC++と同様のLPARAMを取得する方法はありませんでしょうか?
VC++, VC#共にそこまで経験が長いわけでもなく、久々に扱うので無茶苦茶なことを言っているかも知れませんが、双方の言語に理解が深い方のお力をお貸しください。
よろしくお願い致します。
