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