【问题标题】:How to pass a string to CreateProcess function?如何将字符串传递给 CreateProcess 函数?
【发布时间】:2011-01-04 01:12:12
【问题描述】:

我想将一个字符串传递给我的 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

【问题讨论】:

    标签: visual-c++


    【解决方案1】:

    您需要执行以下操作:

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

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

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

    作为一个例子,下面运行一个小实用程序,它会转储给定的命令行:

    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; 
    }
    

    【讨论】:

    • 我已将“.GetBuffer()”放入代码中。但它仍然错误。我已经更新了我上面的问题。
    • 我已经取得了一些进展。我再次更新了上面的代码。但仍然有错误..需要帮助。
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2013-12-11
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多