----------解决一个50分------------〉总共两个问题,高手进来!

danielzhu 2006-01-19 03:32:51
1.在常规DLL中,使用AfxGetApp()->GetMainWnd()->SendMessage(WM_USER_SEND_FROM_DLL,NULL,(LPARAM)str);发送消息,为何在主程序界面窗口,接受不到此消息,而在扩展DLL中,可以实现。在常规DLL中,应该如何发送消息到主程序窗口?

2.对于调用DLL错误,大家一般使用什么方法调试?
使用Map File跟踪程序崩溃,DLL中的地址,如何跟踪?

谢谢!我的程序已开始接手的时候,Debug版就已经无法编译了,现在只能在Release状态下靠日志和Map file调试。请高手进来帮忙!
...全文
205 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
danielzhu 2006-01-21
  • 打赏
  • 举报
回复
问题解决了,多谢 Joe_Cai(超级小强) ,结贴。
bobob 2006-01-20
  • 打赏
  • 举报
回复
关于怎么调试
http://blog.csdn.net/bobob/archive/2005/12/23/559877.aspx
gnixemos 2006-01-20
  • 打赏
  • 举报
回复
直接在DLL中设置断点,跟踪进去啊
cici2006 2006-01-20
  • 打赏
  • 举报
回复
支持
Joe_Cai 2006-01-20
  • 打赏
  • 举报
回复
关于第二个问题——调试Dll:
你就用VC把Dll工程打开,在Project Setting中设置一下可执行程序,然后在dll中设置好断点按F5就走了嘛~
你千万不要搞反了——打开一个可执行程序的工程,这个可执行程序使用那个Dll!这样的话,你不能跟踪dll的执行,只能调式可执行程序!
Joe_Cai 2006-01-20
  • 打赏
  • 举报
回复
关于第一个问题的解决方法,如果我前面说的你都明白,那你自己应该就会解决了~
Joe_Cai 2006-01-20
  • 打赏
  • 举报
回复
关于第一个问题,
使用AfxGetApp()->GetMainWnd()->SendMessage(WM_USER_SEND_FROM_DLL,NULL,(LPARAM)str);发送消息在扩展DLL中成功了而在常规dll中失败了,原因很简单也很复杂(嘿嘿)!
Exe模块和常规Dll模块各自维护了一个“模块信息(AFX_MODULE_STATE )”,而扩展Dll没有,扩展dll和Exe模块共享了一个“模块信息”!模块信息中记录了各自模块的“应用类(CWinApp)”,当一个进程包含一个Exe模块、一个常规Dll模块、和一个扩展Dll时,进程中应该有2个“模块信息”块,一个是Exe的,另一个是常规Dll的,扩展Dll和Exe共享一个,这时,如果你在Exe模块或扩展Dll中调用AfxGetApp()将会得到Exe模块的“模块信息”中记录的应用类,再调用GetMainWnd()将会得到Exe的主窗口,再发送消息肯是没问题的,这也正是你想要的!但是你想下,如果你在常规Dll中调用AfxGetApp()将会得到什么呢?得到的将是常规Dll的“模块信息”中记录的应用类——别忘了常规Dll也有一个应用类,这个应用类可不是Exe模块的应用类啊,如果你再调用GetMainWnd()的话得到的将是什么呢?NULL,你一般不会给常规Dll添加一个主窗口吧,呵呵,它根本不存在,你还想给它发消息!
wenkui 2006-01-20
  • 打赏
  • 举报
回复

“1.窗口句柄是主程序的窗口句柄吗?”
你想往那个窗口发,就设那个窗口的句柄进去。
oyljerry 2006-01-20
  • 打赏
  • 举报
回复
日志输出等
feeboby 2006-01-20
  • 打赏
  • 举报
回复
1:在dll中只要hwnd对,就可以向窗口发送信息。收不到应该是句柄不对
2:跟调试普通程序一样,直接设断点就可以了
xing_xing_xing 2006-01-19
  • 打赏
  • 举报
回复
1.窗口句柄是主程序的窗口句柄吗?
countryboy 2006-01-19
  • 打赏
  • 举报
回复
学习。。。。。。。。
rageliu 2006-01-19
  • 打赏
  • 举报
回复
日志调试很不错的
longyii 2006-01-19
  • 打赏
  • 举报
回复
1.在主程序中调用DLL的一个导出函数(自己写的)将窗口的句柄传入DLL,然后再DLL内就随便你怎么向这个窗口发消息了;

2.在VC菜单中点Project-->Setting-->Debug-->将Excutable for...设为你的主程序,在DLL里就可以正常调试了
cwirong 2006-01-19
  • 打赏
  • 举报
回复
对于第二个问题,如果已经生成了 MAP 文件就好办了。
cwirong 2006-01-19
  • 打赏
  • 举报
回复
第一个问题,因为 str 与主窗口不在同一个进程之内,所以不能这样发送消息。必须用共享内存或用WM_COPYDATA消息发送。
boluoCTO 2006-01-19
  • 打赏
  • 举报
回复
release 也可以加调试信息,C++->Gernal->Debug Info选成 Program database for edit and continue.
然后把Opitization 选为disable,慢慢享受和debug一样的乐趣吧,希望对你有帮助:)
yangyanli 2006-01-19
  • 打赏
  • 举报
回复
谢谢!我的程序已开始接手的时候,Debug版就已经无法编译了,现在只能在Release状态下靠日志和Map file调试。请高手进来帮忙!

你好惨。
Node-RED是工业网物联网的重要组成部,我最开始接触Node-RED,也算是一个偶然的机会吧,上班后领导安排我的第一个任务就是调研一下Node-RED,我之后上网查了一下,那个时候网上相对于Node-RED的资料也比较少,只知道它是IBM公司的一个开源项目。直到最近,发现许多大公司的产品都支持Node-RED,比如西门子公司的IoT2000,研华公司的WISE PaaS 网关,美国OPTO 22等设备中都安装了Node-RED,表明它在工业物联网和控制中已经广泛应用了。 那么工业物联网为什么要用它?它又处于工业物联网那个层次?它具有哪些特性?它帮助物联网解决了什么问题?为什么说它是柔性动态可重构的解决方案呢? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本门课程,老师将带领你从Node-RED的发展,工业物联网定位开始讲解,并带领着大家进行手把手安装Node-RED,实际操作演练Node-RED,并搭建一个物联网小平台,给大家带来更好的学习效果。  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 为了能够让小伙伴们快速了解本门课程的结构,本门课程从以下几个方面展开:Node-RED入门Node-RED安装与配置Node-RED教学实战Node-RED的优势与不足Node-RED能为我们带来什么Node-RED总结与展望

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧