继续问GetOpenFileName的问题

flamingheart 2007-09-01 10:46:38
自己写了一个程序调用GetOpenFileName,发现总是莫名其妙地导致程序突然消失,百思不得其解,我写的函数如下:

void openfile(HWND hWnd)
{
char pFileName[MAX_PATH+1] = "\0";
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = pFileName;
ofn.nMaxFile = MAX_PATH ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
ofn.lpstrDefExt = TEXT("txt");
ofn.lpstrFilter = TEXT("文本文件(.txt)\0*.txt;\0\0");
if (!GetOpenFileName(&ofn))
{
return;
}
}

MAX_PATH的值是260.


于是看了《Windows程序设计(第五版)》第13章的PopPad例子程序,发现也有相同的问题,再看了一下记事本,也有这个问题,下面是一个可以必现的bug:

运行PopPad程序-》File-》Open-》把鼠标悬浮在一个文件上直到出现tips-》点取消按钮-》File-》Open-》把鼠标悬浮在一个文件上直到出现tips-------》整个程序消失

但是有很多应用程序却不出现这个bug,他们是怎么做到的呢?是不是有其他的替代函数啊?望高手指教。
...全文
254 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyw 2007-09-01
  • 打赏
  • 举报
回复
上文描述在装有Adobe Acrobat Reader Version 7.0的XP SP2机器上会出现这个问题。文中提供了一个临时解决办法——a hotfix,不太好。

我曾给一个帖子回复的办法:使用SEH捕获异常然后抛弃,这样不至于让程序crash掉。也不太好。

今日,再次研究这个问题,发现了一个办法:(待验证)
先调用CoInitialize() 或 OleInitialize(),运行完成后,当然要调用对应的UninitXXX方法。

问题的根源在于一个pdf DLL需要COM环境。

解决办法来源: http://www.ureader.com/message/821299.aspx
flamingheart 2007-09-01
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/909486/en-us
-------------
这个我看过了,感觉没什么用啊 ,它是来修复windows的,应用程序中怎么解决这个问题啊?
dyw 2007-09-01
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/909486/en-us

15,980

社区成员

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

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