自己写了一个程序调用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,他们是怎么做到的呢?是不是有其他的替代函数啊?望高手指教。
{
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,他们是怎么做到的呢?是不是有其他的替代函数啊?望高手指教。
-------------
这个我看过了,感觉没什么用啊 ,它是来修复windows的,应用程序中怎么解决这个问题啊?
先调用CoInitialize() 或 OleInitialize(),运行完成后,当然要调用对应的UninitXXX方法。问题的根源在于一个pdf DLL需要COM环境。解决办法来源: http://www.ureader.com/message/821299.aspx