wchar_t filePath = ChooseFile()
GetDlgItem(IDC_EDIT1)->SetWindowTextW(filePath); filePath是正确的。为什么到SetWindowTextW的时候,显示变乱码了。??? 

解决方案 »

  1.   

    wchar_t* filePath = ChooseFile()
    GetDlgItem(IDC_EDIT1)->SetWindowTextW(filePath); 
      

  2.   

    wchar_t* CMultiThreadOpenFileDlg::ChooseFile()
    {
    wchar_t filePath[100];
    memset(&filePath,0,sizeof(wchar_t)*100);
    BROWSEINFO bi;  
    memset(&bi,0,sizeof(bi));
    bi.hwndOwner = m_hWnd;   
    bi.pidlRoot = NULL;   
    bi.pszDisplayName = filePath;   
    bi.lpszTitle = L"请选择目录:";   
    bi.ulFlags = 0;   
    bi.lpfn = NULL;   
    bi.lParam = 0;   
    bi.iImage = 0;   
    //弹出选择目录对话框
    LPITEMIDLIST lp = SHBrowseForFolder(&bi);    if(lp && SHGetPathFromIDList(lp, filePath))   
    {
    return filePath;
    }
    }
      

  3.   

    估计ChooseFile内部使用了HeapAlloc之类的函数把?
    一个字符怎么放下一个路径。要用wchar_t*,或PWSTR。
      

  4.   

    是wchar_t*啊。 我写的时候少写了个*,2楼不是改了啊
      

  5.   

    更不对了,filePath是栈上的东西,你返回一个栈上的指针,栈随时会变化的,一变化你的filePath就被盖掉了。
      

  6.   

    直接把wchar_t类型用CString代替 ,就行了 
      

  7.   

    有两种办法,
    1。在ChooseFile里new一个字符串,在外面delete
    2.ChooseFile要求一个字符串指针作为参数,将路径写入指针指向的位置。
      

  8.   

    人家函数上的wchar_t filePath[100]; 不是这样的局部变量,是堆上数据或者生命期可以保证的变量