unicornx
驱动牛犊
驱动牛犊
  • 注册日期2006-11-13
  • 最后登录2013-04-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望166点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1618回复:1

修改USBView代码时碰见的一个问题,那位大侠帮忙看看?

楼主#
更多 发布于:2010-03-09 22:18
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类也可以,不知道这个例子是怎么回事。谁碰到过类似的情况给点提示啊,谢谢。
驱网无线,快乐无限
jally76
驱动牛犊
驱动牛犊
  • 注册日期2005-04-28
  • 最后登录2010-11-23
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望590点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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参数的
游客

返回顶部