请教 瞌睡虫·星辰 当年 你发帖问的问题

s446721902 2010-02-08 09:45:20
http://topic.csdn.net/u/20081212/21/d9fc11b0-3ee0-4458-bc5d-84448294a656.html?seed=1848472261

是资源问题吗,那该如何处理?
我在debug下对话框也是一闪而过,然后跳出和您一样的错误
...全文
204 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
s446721902 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 whg01 的回复:]
http://topic.csdn.net/t/20040727/18/3215881.html
http://blog.pfan.cn/yuqiexing/40774.html
看看这2个,尤其是第二个链接。
[/Quote]
谢谢先
whg01 2010-02-08
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040727/18/3215881.html
http://blog.pfan.cn/yuqiexing/40774.html
看看这2个,尤其是第二个链接。
chenyu2202863 2010-02-08
  • 打赏
  • 举报
回复
很怀疑你调用了FreeLibrary
s446721902 2010-02-08
  • 打赏
  • 举报
回复
问题拿过来大家看下

MFC Extension DLL,内部有一个CDlgXXXX,封装在一个函数中:

int getXXXX(char *XX, char *XXX)
{
char Reader[8]="";
GetParam("READER", Reader);

if( Reader[0]=='0' )
{
CString Info;
CDlgXXXX dlg; //这是一个自定义的对话框,未导出
if( dlg.DoModal() == IDOK ) //release版本报错:Unhandle Exception in XXX.exe(MFC42.DLL) 0XC0000005 Access Violation
{
.......

//exe对这个dll的调用方式为 LoadLibrary+GetProcAddress 方式;debug版本无报错
==============================================================
同时,还有一个现象:
exe直接使用 LoadLibrary+GetProcAddress 调用dll导出函数时候,dlg.DoModal()报错;
但是,使用了一个ocx控件,在ocx控件中以LoadLibrary+GetProcAddress 调用dll导出函数,然后在exe中调用ocx的接口,发现dlg.DoModal()可以正常工作

问题:
1 为何dlg.DoModal()会报错?有朋友提出是Dialog初始化失败,那为何在ocx中可以正常显示并完成函数功能?
2 断点发现 Dialog hWnd=0x00000000,即使是在Debug模式下程序已经正常运行了,DoModal后的dlg.m_hWnd依然是0x00000000,何解?如果说对话框初始化失败,那么之前显示的对话框是?
3 似乎如果在dll中是use MFC in shared DLL, 那么对话框相关操作是需要模块状态的吧?可是在我的dll中并没有这部分的代码,为何也可以工作?(虽然Release版本出错,但是它是在对话框出现后马上报错的,可以看到弹出的对话框就是在DLL中定义的对话框)

求解!
某某9 2010-02-08
  • 打赏
  • 举报
回复
up,thank you
s446721902 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sms88 的回复:]
引用 4 楼 sms88 的回复:
引用 3 楼 sms88 的回复:
我觉得是你的资源文件有问题 ,重新生成这个对话框吧


发错地了


晕死
[/Quote]
全当是帮我up,thank you
sms88 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sms88 的回复:]
引用 3 楼 sms88 的回复:
我觉得是你的资源文件有问题 ,重新生成这个对话框吧


发错地了
[/Quote]

晕死
healer_kx 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s446721902 的回复:]
引用 1 楼 healer_kx 的回复:
不知道,玩MFC可能需要我们循规蹈矩吧。。。

谢谢你帮我消灭了0回复,哈哈
[/Quote]

客气,我只能干这个了。。。
sms88 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sms88 的回复:]
我觉得是你的资源文件有问题 ,重新生成这个对话框吧
[/Quote]

发错地了
sms88 2010-02-08
  • 打赏
  • 举报
回复
我觉得是你的资源文件有问题 ,重新生成这个对话框吧
s446721902 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
不知道,玩MFC可能需要我们循规蹈矩吧。。。
[/Quote]
谢谢你帮我消灭了0回复,哈哈
healer_kx 2010-02-08
  • 打赏
  • 举报
回复
不知道,玩MFC可能需要我们循规蹈矩吧。。。
s446721902 2010-02-08
  • 打赏
  • 举报
回复
引用 15 楼 xianyuxiaoqiang 的回复:
之前研究过MFC,过了段时间就忘得差不多了……
只记得对话框有两种:有模式/无模式
1)有模式的对话框似乎不能动态创建,它由InitInstance()函数中自动生成的"dlg.DoModal();"显示
2)这里的自定义对话框估计是无模式对话框,它只能由以下语句创建和显示:
bo->Create(IDD_DIALOG);
bo->ShowWindow(SW_SHOW);
3)有模式对话框不能调用Create和ShowWindow函数
4)无模式对话框不能调用DoModal函数
5)无模式对话框还必须重载DestroyWindow方法,否则无法销毁
详细的内容google 有模式/无模式 吧

谢谢详细的解释
xianyuxiaoqiang 2010-02-08
  • 打赏
  • 举报
回复
之前研究过MFC,过了段时间就忘得差不多了……
只记得对话框有两种:有模式/无模式
1)有模式的对话框似乎不能动态创建,它由InitInstance()函数中自动生成的"dlg.DoModal();"显示
2)这里的自定义对话框估计是无模式对话框,它只能由以下语句创建和显示:
bo->Create(IDD_DIALOG);
bo->ShowWindow(SW_SHOW);
3)有模式对话框不能调用Create和ShowWindow函数
4)无模式对话框不能调用DoModal函数
5)无模式对话框还必须重载DestroyWindow方法,否则无法销毁
详细的内容google 有模式/无模式 吧
s446721902 2010-02-08
  • 打赏
  • 举报
回复
渐渐地沉下去了!_!,哪位帮指点下
s446721902 2010-02-08
  • 打赏
  • 举报
回复
为何用domodal是可以打开对话框的,但是用洗面的代码就不行了

CDlg* bo = new CDlg;
bo->Create(IDD_DIALOG);
bo->ShowWindow(SW_SHOW);

求指教

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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