MFC CreateProcess не передает аргумент командной строки UTF8 в процесс - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь запустить консольное приложение из приложения MFC, используя CreateProcess.
cmd Переменная CString, которая содержит имя приложения и аргумент командной строки, который является китайским именем файла UTF8.
Имя файла не передается в формате UTF8, и приложение завершается ошибкой.
Как правильно отправить команду?

BOOL bRetVal = ::CreateProcess( NULL,             
        cmd.GetBuffer(m_strProg.GetLength()),                 // Command line. 
        NULL,             // Process handle not inheritable. 
        NULL,             // Thread handle not inheritable. 
        FALSE,            // Set handle inheritance to FALSE. 
        0,                // No creation flags. 
        NULL,             // Use parent's environment block. 
        NULL,             // Use parent's starting directory. 
        &si,              // Pointer to STARTUPINFO structure.
        &pi               // Pointer to PROCESS_INFORMATION structure.
        );

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

В зависимости от настроек вашего компилятора вы будете вызывать либо CreateProcessA, который принимает char строки в текущей кодовой странице, либо CreateProcessW, который принимает wchar_t строки в Unicode UTF-16.Ни один из них не сможет обработать строку UTF-8 в качестве входных данных.

Вам следует преобразовать строку UTF-8 в UTF-16, а затем построить из нее командную строку.

1 голос
/ 02 февраля 2012

Предполагается, что вы компилируете в многобайтовом режиме (не в юникоде).

CT2W path(m_strProg);
CreateProcessW(path, ...);
0 голосов
/ 02 февраля 2012

Я просто говорил, что у вас есть два негатива на английском, что делает его позитивным - так вы говорили, что он действительно проходит UTF8.В любом случае, вам нужно прочитать http://www.joelonsoftware.com/articles/Unicode.html Кроме того, вам нужно изменить локаль и кодовую страницу, что-то вроде символов Unicode в командной строке Windows - как?

...