GetOpenFileName的有关问题求帮助
GetOpenFileName的问题求帮助
编了一个文件对话框的代码如下
其中调用时传入的 LPCTSTR filter是"Text Files(*.txt)\0*.TXT\0All Files(*.*)\0*.*\0\0"
这段代码工作本来没有任何问题,但最近本人把原来的程序未作任何更改,变成了dll, 这时运行到这来对话框就出不来了,跟踪了错误代码,为CDERR_INITIALIZATION。
反复修改ofn的参数,始终是这样。MSDN说内存不够时出现CDERR_INITIALIZATION,但机器内存是足够的,lpstrFile也分配得足够大了,我这里都1024了,MSDN上才260。
难道是在Dll中使用GetOpenFileName还有什么要设置的吗?
ps,ChooseFont和ChooseColor对话框在Dll里面很正常。
请问有兄弟们遇到同样的问题吗?
------解决方案--------------------
ofn有个hook成员,你把他hook上。
在hook程序中看看 INITIALIZE 时有什么问题。
编了一个文件对话框的代码如下
- C/C++ code
bool ShowFileDialog(HWND hWnd, bool open, string &filename, LPCTSTR filter) { OPENFILENAME ofn; // common dialog box structure const nMaxFile = 1024; TCHAR szFile[nMaxFile]; // buffer for file name ZeroMemory(&ofn, sizeof(OPENFILENAME)); //szFile[0] = TCHAR('\0'); ZeroMemory(szFile, sizeof(szFile)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.hInstance = GetModuleHandle(NULL); ofn.lpstrFilter = filter; ofn.lpstrCustomFilter = _TEXT(""); ofn.nMaxCustFilter = 0L; ofn.nFilterIndex = 1L; ofn.lpstrFile= szFile; ofn.nMaxFile = nMaxFile; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = _TEXT(""); ofn.lpstrTitle = NULL; ofn.lpstrDefExt = _TEXT("txt"); ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT; ofn.nFileOffset = 0; ofn.nFileExtension = 0; if(open) { if( GetOpenFileName(&ofn) == TRUE) { filename = ofn.lpstrFile; return true; } else { UINT errCode = CommDlgExtendedError(); } } else { if( GetSaveFileName(&ofn) == TRUE) { filename = ofn.lpstrFile; return true; } else { UINT errCode = CommDlgExtendedError(); } } return false; }
其中调用时传入的 LPCTSTR filter是"Text Files(*.txt)\0*.TXT\0All Files(*.*)\0*.*\0\0"
这段代码工作本来没有任何问题,但最近本人把原来的程序未作任何更改,变成了dll, 这时运行到这来对话框就出不来了,跟踪了错误代码,为CDERR_INITIALIZATION。
反复修改ofn的参数,始终是这样。MSDN说内存不够时出现CDERR_INITIALIZATION,但机器内存是足够的,lpstrFile也分配得足够大了,我这里都1024了,MSDN上才260。
难道是在Dll中使用GetOpenFileName还有什么要设置的吗?
ps,ChooseFont和ChooseColor对话框在Dll里面很正常。
请问有兄弟们遇到同样的问题吗?
------解决方案--------------------
ofn有个hook成员,你把他hook上。
在hook程序中看看 INITIALIZE 时有什么问题。