获取WinExec()中的路径有关问题

获取WinExec()中的路径问题
我写了个基于对话框的小程序,想实现的功能是通过本程序打开其他程序.
首先按“浏览”选择一个程序,然后获得程序路径,代码如下:
void   CEasyUDlg::OnBnClickedOpen()
{
CFileDialog   ldFile(TRUE);

if(ldFile.DoModal()   ==   IDOK)

m_strPROPATH   =   ldFile.GetPathName();

                                    UpdateData(FALSE);

}//程序路径在一个编辑框中显示

然后要实现的是,按下“运行”即能够打开相应程序,在这里就出了问题:

WinExec(LPCSTR   value,   SW_SHOW)中,第一个参数必须是LPCSTR类型,而

m_strPROPATH是CString类型。

在网上搜了,得知可以用以下方法将CString转化为LPCSTR,代码如下:

int   length   =   m_strPROPATH.GetLength();

      LPCSTR   lpstrPROPATH   =   (LPCSTR)m_strPROPATH.GetBuffer(length);
   
      size_t   aLen   =   length   +   1;

      WinExec(lpstrPROPATH,   SW_SHOW);

请问对不对?

总之我这样转化了之后,能编译通过,但选定欲运行程序后,点了“运行”却没反

应。

又想起获得的程序路径中层次符是用 '\ '表示的,而VC和VS环境表示层次符的应该

是 '/ ',于是又写了如下转化代码:

int   length   =   m_strPROPATH.GetLength();

int   i   =   0;

while(i   <   length)

{

if   (   m_strPROPATH[i]== '\\ ')


m_strPROPATH[i]   =   '/ ';

i++;

}  

如此改动后,有错了,提示m_strPROPATH[i]必须是个左值。

现在自己已经没头绪了,不知道该如何实现这个小程序的功能了。

请大家给想想办法,解决我的思路下遇到的困难,或者给出新的思路都行。




------解决方案--------------------
我已经在VC++6.0上编译通过。关键代码如下:
void CMyDlg::OnBrowse()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "*.exe(程序文件)|*.exe|| ");
if(dlg.DoModal()==IDOK)
{
m_strShow=dlg.GetPathName();
UpdateData(FALSE);
}
}

void CMyDlg::OnRun()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
WinExec(m_strShow,SW_SHOW);
}
------解决方案--------------------
LZ好像一直在困惑要不要把 "\ "换成 "\\ ",实际上是没必要的,你能在浏览对话框看到诸如 "x:\xxx "的形式,你用一个变量去取的话,这个变量实际上就已经等于你自己去定义 "x:\\xxx "这样一个字符串.
不信的话你可以把这个变量用控制台输出一下

另外你说的 "因为VC6的默认编码是ASCⅡ,而VS2005的默认编码是UNICODE. " 你可以把2005的编码改成多字节的,否则调用的函数实际上都是W的版本