GetOpenFileName的有关问题求帮助

GetOpenFileName的问题求帮助
编了一个文件对话框的代码如下
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 时有什么问题。