以前问过的老问题,没解决很简单的一个试验CFileDialog dlg(TRUE);
dlg.DoModal();我的开发环境: 
SDK版本为February 2003 Build: 3790.0
VC6.0sp6结论如下:在工程中定义#define _WIN32_WINNT 0x0500
每次退出要出错,就算你只声明一下CFileDialog dlg(TRUE);,退出也报错
只能用以下任意一种方法编译就能运行正常1.用vs.net编译
2.或用老的SDK
3.或去掉#define _WIN32_WINNT 0x0500但是我最终用VC6编译,必须有#define _WIN32_WINNT 0x0500,请问如何解决?
请大家帮助解决一下

解决方案 »

  1.   

    好象很高深,没有  SDK版本为February 2003 Build: 3790.0没办法试,关注……
      

  2.   

    VC6跟新的SDK版本整合到一起是会出问题。
    up,gz
      

  3.   

    TO:legendhui(何离心之可同兮,吾将远逝以自疏)
        SDK版本用最新的也可以TO:DentistryDoctor(雅克医生<改行做程序员了>) 
        随便一个程序,加个按钮,响应函数里面键入:
        CFileDialog dlg(TRUE);
        dlg.DoModal();
        就可以了
      

  4.   

    我以前是问过一次,我是没有定义#define _WIN32_WINNT 0x0500解决的
    但这样不时办法
      

  5.   

    出错位置有CFileDialog::~CFileDialog()
      

  6.   

    TO:pomelowu(羽战士)
        上次不是说有个老外找到了解决办法了吗?
        是怎么解决的?
      

  7.   

    一定要用这个版本的SDK吗? 不有这个版本可以么?? 又或者不用MFC这个类,而直接使用API来编写!!
      

  8.   

    OPENFILENAME 在_WIN32_WINNT 0x0500的时候多了3个成员,不知道会不会有影响
      

  9.   

    多了3个成员不会有影响,你这样设置后
    dlg.m_ofn.lStructSize = sizeof(OPENFILENAME); 
    对话框会变成Win2K的新的文件对话框
    可能是根据lStructSize 的大小来判断是否使用那3个成员
      

  10.   

    哈哈,你也遇到这个问题了啊?!我今天也刚开始装了sdk,发现了这个问题。可我发现我在对话框里调用就没事,在frame调用就出现楼主说的问题。想起以前在网上有文章提过filedialog的问题,又去看了下,折腾半天之后,发现用那位帖主的方法就不会出错误。
    代码如下: OPENFILENAME ofn; 
    TCHAR lpstrFilename[MAX_PATH] = ""; 
    ZeroMemory(&ofn, sizeof(ofn));  ofn.lStructSize = sizeof(OPENFILENAME);//lStructSize的返回值是是76 
    ofn.hwndOwner = this->m_hWnd; 
    ofn.lpstrFilter = "微软 Excel 工作表文件 (*.xls)"; 
    ofn.nMaxFile = MAX_PATH; 
    ofn.lpstrFile=lpstrFilename; 
    ofn.lpstrInitialDir = strPath; if (GetOpenFileName(&ofn)) 
                do something....以上代码在我这是调试通过,没错误。:)
      

  11.   

    这个问题已经讨论过了,是BUG,除非你修改MFC源码,或者等MS出SP7,否则没办法。
      

  12.   

    按照那篇文章的说法,可能是mfc内部实现只是针对低版本api,换了高版本之后,他可能有些就不执行了,结果导致非法操作……瞎猜的,不知道对错……:p
      

  13.   

    static OPENFILENAME ofn={0};

    TCHAR szName[MAX_PATH];
    *szName = 0;

    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = AfxGetMainWnd()->GetSafeHwnd();
    ofn.lpstrFilter       = "txt files\0*.txt\0All files\0*.*\0";
    ofn.lpstrCustomFilter = NULL;
    ofn.nFilterIndex      = 1;
    ofn.lpstrFile         = szName;
    ofn.nMaxFile          = MAX_PATH;
    ofn.lpstrTitle        = TEXT("Open txt File...\0");
    ofn.lpstrFileTitle    = NULL;
    ofn.lpstrDefExt       = TEXT("*\0");
    ofn.Flags             = OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST;

    // Create the standard file open dialog and return its result
    GetOpenFileName((LPOPENFILENAME)&ofn);
    AfxMessageBox(ofn.lpstrFile);
      

  14.   

    谢谢
        21bird(世纪菜鸟:sailing) 
        bobob(静思--潜心研究PDF)
    看来只能用这种方法,是MFC的BUG
      

  15.   

    呵呵~~用API方式倒是不错。不过CFileDialog不就是对API的封装么,问题出在哪里呢?API方式没问题的话怎么会MFC方式就出错了了呢手头没有VC6+sp6,楼主分析分析源码?
    猜想还是跟那3个新增的成员有关系,MSDN上说那三个东西必须要置0
      

  16.   

    现在没精力去研究MFC,也不知道问题出在哪里
    不知道有没有哪位老师愿意去研究一下,为大家解除困惑