阅读:1618回复:1
修改USBView代码时碰见的一个问题,那位大侠帮忙看看?
BOOL
USBView_OnDeviceChange ( HWND hwnd, UINT uEvent, DWORD dwEventData ) { PDEV_BROADCAST_HDR pHeader = NULL; pHeader = (PDEV_BROADCAST_HDR)dwEventData; if (gDoAutoRefresh) { 。。。。。。 红色是新加的代码。 发现取到的指针pHeader 值总是非法,其值很小,用户态似乎是无法访问的,怀疑和该程序是一个基于dialog创建的窗口有关。 另外用普通的窗口创建就可以,在MFC下的CDialog类也可以,不知道这个例子是怎么回事。谁碰到过类似的情况给点提示啊,谢谢。 |
|
|
沙发#
发布于:2010-03-16 11:04
问题应该是出在:HANDLE_MSG(hWnd, WM_DEVICECHANGE, USBView_OnDeviceChange)这里
看Windowsx中是如何定定义的: #define HANDLE_MSG(hwnd, message, fn) \ case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn)) 因此HANDLE_MSG(hWnd, WM_DEVICECHANGE, USBView_OnDeviceChange)其实会导向另外一个宏: #define HANDLE_WM_DEVICECHANGE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (UINT)(wParam), (DWORD)(wParam)) 看到没有,lParam参数并没有使用到,而你的调用则是要用到lParam参数的 |
|