通用对话框会导致程序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 迷宫の未来 阅读(1551) 评论(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组件  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(10)

随笔档案

文章档案

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜