通用对话框会导致程序CRUSH?

   近日的一个程序中使用了通用对话框CFileDialog来选择文件,奇怪的是我在本机上测试始终不会出現问题,但在其他机器上有时就会导致程序整个CRUSH掉,检查代码没有发现任何问题:
char szFilters[]="Hbu Files (*.hbu)|*.hbu|All Files (*.*)|*.*||";

CFileDialog dlg( TRUE,NULL,m_szHbuPath,OFN_FILEMUSTEXIST 
| OFN_EXTENSIONDIFFERENT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, szFilters,this);
if(dlg.DoModal() == IDOK)
{
        m_szHbuPath 
= dlg.GetPathName();
        UpdateData(FALSE);
}

   在发生CRUSH问题的机器上跟踪调试发现是在DoModal中调用GetFileNameA时出現的问题,经过简化代码最终可以确定是CFileDialog自身出的问题。
   后来在网上发现有人也遇到过相同的问题,解决方法是在应用程序初始化的时候加上OLE的初始化:AfxOleInit()。问题就解决了。
   PS:如果哪位高手知道该问题的发生机理和解决原理,请不吝告知!

posted on 2008-01-30 09:19 追梦时代 阅读(915) 评论(3)  编辑 收藏 引用

评论

# re: 通用对话框会导致程序CRUSH? 2008-01-30 13:17 xxx

在你的计算机上,已经有其他程序调用过AfxOleInit()而已。  回复  更多评论   

# re: 通用对话框会导致程序CRUSH? 2008-01-30 22:16 agaric

是commncontrol,沒有初始化吧。  回复  更多评论   

# re: 通用对话框会导致程序CRUSH? 2008-01-31 08:43 浪迹天涯

网上不是说在已安装vc的机器上不会出问题,只在没有安装过vc的机器上才会出问题。如果是这样,我的理解是CFileDialog在这两种环境下的处理不同,一种直接调用,一种基于COM组件  回复  更多评论   


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航:
<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(3)

随笔档案

文章档案

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜