Как передать строку в функцию CreateProcess? - PullRequest
4 голосов
/ 04 января 2011

Я хочу передать строку моей функции 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 Ответ

2 голосов
/ 04 января 2011

Вам нужно будет сделать что-то вроде:

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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...