listbox 中单击打开文件的问题消息响应函数如下
{
CString file_path;
GetDlgItemText(IDC_LIST1,file_path,100);
BOOL Open(file_path, CFile::modeRead|CFile::shareDenyWrite, NULL);
} error C2664: 'int CWnd::GetDlgItemTextW(int,LPTSTR,int) const' : cannot convert parameter 2 from 'CString' to 'LPTSTR'
 error C2078: too many initializers出现这两个ERROR  虽然能看懂,但是不知道该怎么样解决。
请教各位大侠

解决方案 »

  1.   

    GetDlgItemText(IDC_LIST1,file_path,100);
    改成GetDlgItemText(IDC_LIST1,(LPTSTR)(LPCTSTR)file_path,100);
      

  2.   

    GetDlgItemText(IDC_LIST1,file_path.GetBuffer(100),100);
    file_path.ReleaseBuffer();
    CFile file;
    BOOL bOpen = file.Open(file_path, CFile::modeRead|CFile::shareDenyWrite, NULL);
      

  3.   

    try
    {
    CString file_path(_T(""));
    GetDlgItemText(IDC_LIST1,file_path);
    CFile file;
    BOOL bRet = file.Open(file_path, CFile::modeRead|CFile::shareDenyWrite, NULL);
    file.Write(...);
    file.Flush();
    file.Close();
    }
    catch(CFileException* e)
    {
     e->ReportError();
     e->Delete();
    }------------------------------------------------------------------
    要么这样;
    try
    {
    TCHAR file_path[MAX_PATH] = {0};
    GetDlgItemText(IDC_LIST1,file_path, MAX_PATH-1);
    CFile file;
    BOOL bRet = file.Open(file_path, CFile::modeRead|CFile::shareDenyWrite, NULL);
    file.Write(...);
    file.Flush();
    file.Close();
    }
    catch(CFileException* e)
    {
     e->ReportError();
     e->Delete();
    }
      

  4.   

    将GetDlgItemText(IDC_LIST1,file_path,100);改为GetDlgItemText(IDC_LIST1,(LPSTR)file_path,100); 或者file_path.GetBuffer(0),然后file_path.ReleaseBuffer();
      

  5.   

    我建议你这样 
    char str[MAX_PATH]; 
    GetDlgItemText(IDC_LIST1,(LPSTR)str,100);
    涉及文件名用MAX_PATH宏,少用类对象作参数,有时需要考虑拷贝构造等问题,也许是习惯,或者编程风格,觉得这东西靠不住。
    如果非需要CString,可以
    CString file_path = (char*)str;