如何将字符串传递给CreateProcess函数?

时间:2011-01-04 01:12:12

标签: visual-c++

我想将一个字符串传递给我的CreateProcess函数,以便我可以将此函数用于我的所有操作。如何正确地做到这一点?

以下是我的代码:

CString ExecuteExternalProgram(CString pictureName)
 {
   CString parameterOne = _T(" -format \"%h\" C:\\");
   CString filename = pictureName;
   CString parameterLast = _T("\"");
   CString parameterFull = parameterOne + filename + parameterLast;

   CreateProcess(_T("C:\\identify.exe"), parameterFull,0,0,TRUE,
      NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
   CloseHandle(wPipe);  

   .......
 }

错误:

错误2错误C2664:'CreateProcessW':无法将参数2从'ATL :: CString'转换为'LPWSTR'c:\ a.cpp

1 个答案:

答案 0 :(得分:2)

您需要执行以下操作:

CreateProcess(L"C:\\identify.exe",csExecute.GetBuffer(),0,0,TRUE,
   NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
由于某种原因,

CreateProcess()想要命令行参数的可写缓冲区,因此CString到普通旧指针的隐式转换不会发生(因为它只会执行隐式转换)如果它是一个const指针)。

如果这不是您遇到的问题,请发布有关您遇到的错误或意外行为的更多详细信息。

作为一个例子,下面运行一个小的utilty程序来转储它给出的命令行:

int main() {
    CString csExecute = "some string data";

    STARTUPINFO sInfo = {0};
    sInfo.cb = sizeof(sInfo);
    PROCESS_INFORMATION pInfo = {0};

    CreateProcess(L"C:\\util\\echoargs.exe",csExecute.GetBuffer(),0,0,TRUE,
        NORMAL_PRIORITY_CLASS,0,0,&sInfo,&pInfo);

    return 0; 
}