请问在mfc扩展dll中使用CFiledailog时闪退的问题

melos 2013-03-16 11:37:00
我现在编写一个程序,其中在一个mfc的扩展dll中使用到了CFiledailog,但一旦DoModal的时候,就会引起整个程序闪退。
诡异的是,这种情况不是每次都会出现,过段时间重新编译一下,它就正常了,或者更改一些其他的代码后再编译,它也正常了。也就是说,好些每次编译是随机会出现这个问题,但只要编译好后,如果它会闪退,就一直会闪退。
我不知道是哪出了问题,是主程序?是dll?
我尝试的一些方法,包括创建对象的时候填写完整参数,将DoModal放在try模块中,等等,都无法解决问题。
我使用的环境是xpsp3,vc2008+sp1,release版本。我必须在扩展dll中使用它。
请教啊请教!
...全文
214 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
melos 2013-03-22
  • 打赏
  • 举报
回复
再继续问个问题,我使用的是sqlite3数据库,在主程序m.exe中生产数据,通过WinExec调用另一个v.exe查看数据,使用了虚表。查看的时候一切都没问题。但v.exe退出后,再关闭m,会出现内存问题。 我的尝试: 1、在v中只定义一个sqlite db对象,不打开,不关闭。 2、打开数据库,不关闭。 3、关闭数据库。 4、在v中打开与m中不同的数据库。 都是一样的情况。
melos 2013-03-22
  • 打赏
  • 举报
回复
目前测试了一下,好像问题得到了解决。再换几次环境看看。 十分感谢gordon3000!!!!!
melos 2013-03-21
  • 打赏
  • 举报
回复
谢谢,明天到单位试试先
副组长 2013-03-20
  • 打赏
  • 举报
回复
在DLL中从CFileDialog派生一个新类。
class AFX_EXT_CLASS CPreviewFileDialog : public CFileDialog
设置
m_ofn.lpTemplateName = "FILEOPEN_TEMPLATE";
副组长 2013-03-20
  • 打赏
  • 举报
回复
在主程序的资源中声明 "FILEOPEN_TEMPLATE"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

FILEOPEN_TEMPLATE DIALOGEX 0, 0, 95, 15
STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    LTEXT           "",stc32,0,2,8,8,NOT WS_VISIBLE | NOT WS_GROUP
    GROUPBOX        "",6000,10,2,81,9,NOT WS_VISIBLE
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
    "FILEOPEN_TEMPLATE", DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 88
        TOPMARGIN, 7
        BOTTOMMARGIN, 8
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // 英语(美国) resources
/////////////////////////////////////////////////////////////////////////////
副组长 2013-03-19
  • 打赏
  • 举报
回复
找到了,这是4年前一个从CFileDialog类派生类前面的注释,改造CFileDialog类用于预览图像的。
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//        这个 DLL 应用时一定在主程序资源里面增加一个 FILEOPEN_TEMPLATE  对话框模板
//        否则 DoModal 不出现停留的对话框
//        2009 03 26
//
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
副组长 2013-03-19
  • 打赏
  • 举报
回复
印象中好像遇到过这问题,是UNICODE还是什么引起的来的,忘了。
蒋晟 2013-03-19
  • 打赏
  • 举报
回复
装一个ShellExView之后把第三方的扩展禁用掉看看
melos 2013-03-19
  • 打赏
  • 举报
回复
楼上能详细点么?是在主程序中?还是在dll中?添加一个对话框资源?
melos 2013-03-18
  • 打赏
  • 举报
回复
能具体点么?应该像你说的一样,因为我用openfilename也是一样的。。。 能看到文件选择对话框创建出来,但马上闪退,程序也闪退。 由于我用到了其他的dll,只有release版的,所以我也是直接release编译,木有debug。。。 我找了所有网上的方法,都无效。。。 现在我感兴趣的是,为什么同样的环境,有时候能编译正常,有时候闪退。。。
蒋晟 2013-03-17
  • 打赏
  • 举报
回复
用openfilename看看,如果这个也出错的话,检查你的计算机上的shell扩展
melos 2013-03-16
  • 打赏
  • 举报
回复
帮个忙啊!!!!
melos 2013-03-16
  • 打赏
  • 举报
回复
我还尝试了在堆上创建CFiledailog*, #ifdef _WIN32_WINNT #undef _WIN32_WINNT #endif 以及使用GetOpenFileName的方法,都一样的。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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