2012-01-21 76 views
0

我试图调用GetOpenFileName这样的:GetOpenFileName触发断点

int main(int argc, char* argv[]) 
{ 

OPENFILENAME ofn;  // common dialog box structure 
wchar_t szFile[260];  // buffer for file name 
HWND hwnd;    // owner window 
HANDLE hf;    // file handle 
ZeroMemory(&ofn, sizeof(ofn)); 
ofn.lStructSize = sizeof(ofn); 
wchar_t title[500]; // to hold title 
GetConsoleTitle(title, 500); 
HWND hwndConsole = FindWindow(NULL, title); 
ofn.hwndOwner = hwndConsole; 
ofn.lpstrFile = szFile; 
ofn.lpstrFile[0] = '\0'; 
ofn.nMaxFile = sizeof(szFile); 
ofn.lpstrFilter = L"All\0*.*\0Text\0*.TXT\0"; 
ofn.nFilterIndex = 1; 
ofn.lpstrFileTitle = NULL; 
ofn.nMaxFileTitle = 0; 
ofn.lpstrInitialDir = NULL; 
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 

// Display the Open dialog box. 

if (GetOpenFileName(&ofn)==TRUE) 
    hf = CreateFile(ofn.lpstrFile, 
        GENERIC_READ, 
        0, 
        (LPSECURITY_ATTRIBUTES) NULL, 
        OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL, 
        (HANDLE) NULL); 

的PROG停止(消息:example.exe引发了断点(不是一个我放置))在“如果(GetOpenFileName(& ofn)== TRUE)“当我休息时,我收到一条消息,说明没有可用的源。 如果我没有中断,只需按继续,对话框就会弹出并按预期工作。我究竟做错了什么? 我只注意到它的作品没有在释放模式的问题...

+0

你在混合使用Unicode和ANSI字符串......我很惊讶这个编译。某些字符串以“L”作为前缀,但您明确地调用了几个Win32函数的ANSI版本。现在是2012年:十多年来,所有内容都已经完全符合Unicode。 –

+0

它是断点还是第一次机会异常? –

+0

消息说“遇到了断点” – Lumpi

回答

0

一个可能的问题: ofn.nMaxFile应的字符数,而不是大小的缓冲区的字节数。试试这个:

ofn.nMaxFile = sizeof(szFile)/sizeof(wchar_t); 
+0

没有帮助。我试图围绕整个事情进行尝试/抓住,甚至没有让我更聪明。 – Lumpi