2016-06-28 2 views
-2
STARTUPINFO   siStartupInfo; 
PROCESS_INFORMATION piProcessInfo; 

memset(&siStartupInfo, 0, sizeof(siStartupInfo)); 
memset(&piProcessInfo, 0, sizeof(piProcessInfo)); 

siStartupInfo.cb = sizeof(siStartupInfo); 

if (CreateProcess("C:\\Program Files\\SublimeText2\\sublime_text",    
    " source.cpp",      
    NULL, 
    NULL, 
    FALSE, 
    CREATE_DEFAULT_ERROR_MODE, 
    NULL, 
    NULL, 
    &siStartupInfo, 
    &piProcessInfo) == FALSE) 


    WaitForSingleObject(piProcessInfo.hProcess, INFINITE); 


::CloseHandle(piProcessInfo.hThread); 
::CloseHandle(piProcessInfo.hProcess); 

Я пытаюсь открыть файл в Sublime Text через CreateProcess но сборка показывает следующие ошибки:Я пытаюсь открыть файл в Sublime Text через CreateProcess(), но сборка показывает ошибку

  1. аргумент типа "const char *" несовместим с параметром типа "LPWSTR".

  2. аргумент типа "сопзЬ символ *" несовместим с параметром типа "LPWCSTR".

  3. 'BOOL CreateProcessW (LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION)': не может преобразовать аргумент 1 от 'сопзЬ полукокса [32]' к «LPCWSTR .

ответ

1

LPWSTR (л Ong Р ointer к Вт ида STR луг) является wchar_t*, не char*. У вас есть 3 варианта устранения проблемы:

  1. Не компилировать с помощью UNICODE #defined.
  2. Использование CreateProcessA
  3. Изменение вызова использовать широкие строковые константы, и вызвать версию функции W явно, как в:

    CreateProcessW(L"C:\\Program Files\\SublimeText2\\sublime_text", 
           //... 
    

Из трех, третий вариант является которую вы должны использовать.

+0

выше помогли работы. Не могли бы вы рассказать о возможности прекратить приложение (Sublime Text) после определенного времени с использованием вышеуказанного кода. –

+0

@DikshitKalra: Это другой вопрос (тот, который вы уже задали сегодня, получил полезные подсказки, а затем решил удалить). Почему вы упрямо игнорируете совет, чтобы принять [тур]? – IInspectable

+1

@theB: Третий вариант должен вызывать 'CreateProcessW', поскольку вы передаете явные строковые литералы символов. Совместимый тип символьной строки для 'CreateProcess' -' TCHAR * ', и использование сопоставлений с общим текстом больше не является яростью, я слышу. Кроме того, вы не можете передать строковый литерал ко второму параметру 'CreateProcessW'. Он должен быть перезаписываемым буфером. – IInspectable

Смежные вопросы