首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

自定义消息发送指针为什么总是崩溃?该如何解决

2012-01-22 
自定义消息发送指针为什么总是崩溃?发送端dllLRESULTCALLBACKCallWndProc(intnCode,WPARAMwParam,LPARAMlP

自定义消息发送指针为什么总是崩溃?
发送端dll
LRESULT   CALLBACK   CallWndProc(int   nCode,WPARAM   wParam,LPARAM   lParam)
{
CWPSTRUCT   *p   =   (CWPSTRUCT   *)lParam;

if   (HC_ACTION   ==   nCode   &&   p-> message     ==   WM_MOVE)
{
      int   cTxtLen   =   GetWindowTextLength(p-> hwnd);
      LPSTR   szWndName   =   new   char[cTxtLen+1];
      GetWindowText(p-> hwnd,   (LPWSTR)szWndName,   cTxtLen+1);  
      SendMessage(g_hWnd,WM_DISPLAY_MSG,0,(LPARAM)szWndName);
      delete   []   szWndName;
                         
}


LRESULT   ret   =   CallNextHookEx(hMessage,   nCode,   wParam,   lParam);
return   0;

}
接受端MFC
LRESULT   CSystestView::OnDisplayMsg(WPARAM   wParam,LPARAM   lParam)
{

AfxMessageBox((LPSTR)lParam);

return   0;
}
运行总是崩溃,不知如何改?大家帮帮忙,谢谢!

[解决办法]
接受端蹦,还是HOOK的DLL呢?
如果是DLL端,不好用VC调试器的话。
你可以用Ollydbg的“断在DLL加载处”一步一步检测,确定在哪个地方蹦的。
应该可以找到问题的地方。
[解决办法]
楼上说的是~~~
也不知道蹦的是哪?
SendMessage(g_hWnd,WM_DISPLAY_MSG,0,(LPARAM)szWndName);
后没有检测成功与否!
AfxMessageBox((LPSTR)lParam); //不知道有没有成功的弹出过没,搞不好问题出在这
也没有检测lParam!
如果发送不成功,那不就蹦了~~~~~


[解决办法]
我指出问题啊,说的不对不要见怪啊,呵呵~~
1。钩子dll会映射到其他进程,g_hWnd就没有用了,建议用FindWindow取得主窗口句柄
2。发送一个字符串,请用COPYDATA消息,原因同上,不是一个进程了
3。LRESULT ret = CallNextHookEx(hMessage, nCode, wParam, lParam);
return 0; 应该是reutrn ret;吧?

热点排行