自己写了一个程序调用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,他们是怎么做到的呢?是不是有其他的替代函数啊?望高手指教。

解决方案 »

  1.   

    http://support.microsoft.com/kb/909486/en-us
      

  2.   

    http://support.microsoft.com/kb/909486/en-us
    -------------
    这个我看过了,感觉没什么用啊 ,它是来修复windows的,应用程序中怎么解决这个问题啊?
      

  3.   

    上文描述在装有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