Форум программистов, компьютерный форум CyberForum.ru

Чтение UNICODE символов из STDOUT процесса - C++

Восстановить пароль Регистрация
 
Patron
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 2
12.06.2014, 20:45     Чтение UNICODE символов из STDOUT процесса #1
У меня есть процесс (cmd.exe) создан через WINAPI функцию CreateProcess. К процессу подключено 2 переменных типа HANDLE из которых в свою очередь созданы пайпы для записи и чтения из процесса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
HANDLE g_hChildStd_IN_Rd = NULL;
// write to pipe
HANDLE g_hChildStd_IN_Wr = NULL;
// read from pipe
HANDLE g_hChildStd_OUT_Rd = NULL;
HANDLE g_hChildStd_OUT_Wr = NULL;
 
...
 
// Create a child process that uses the previously created pipes for STDIN and STDOUT.
 
bool createCmdSubProcess()
{  
    SECURITY_ATTRIBUTES saAttr; 
   // Set the bInheritHandle flag so pipe handles are inherited.  
   saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
   saAttr.bInheritHandle = TRUE; 
   saAttr.lpSecurityDescriptor = NULL; 
 
   // Create a pipe for the child process's STDOUT. 
   CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0);
   SetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0);
 
   // Create a pipe for the child process's STDIN. 
   CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0);
   SetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0);
 
... 
 
// кусок кода который читает из процесса
 
        DWORD dwRead; 
    char chBuf[1000];  // пробовал wchar_t chBuf[1000]; , TCHAR chBuf[1000];, WORD chBuf[1000];, DWORD chBuf[1000];, BYTE chBuf[1000];
    BOOL bSuccess = FALSE;
    // Read output from the child process's pipe for STDOUT
    // Stop when there is no more data.    
    for (;;) 
    { 
        bSuccess = ReadFile(g_hChildStd_OUT_Rd, chBuf, 1000, &dwRead, NULL);
        if( ! bSuccess || dwRead == 0 ) { 
            break;
        }
    }
Весь код в принципе рабочий но проблема в том что буквы отличные от английских записываются в буфер с непонятными значениями и при выводе получаются иероглифы.

Скриншот контента буфера сделан в дебагере:
Чтение UNICODE символов из STDOUT процесса
а должно быть такое
Чтение UNICODE символов из STDOUT процесса

Я 2 дня уже немогу найти решения, пробовал менять локаль, ставить директиву #define UNICODE.

Подскажите если кто знает как корректно читать любые символы из процесса?

Добавлено через 2 часа 27 минут
Проблема решена, спасибо все кто посмотрел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 20:45     Чтение UNICODE символов из STDOUT процесса
Посмотрите здесь:

C++ Чтение символов с консоли
C++ CStdioFile не поддерживает чтение файлов в формате Unicode. Что делать?
Чтение из памяти стороннего процесса и запись в файл массива типа doouble C++
C++ Чтение символов из строки
Чтение из stdin и запись в stdout бинарной информации C++
C++ Чтение Unicode
C++ Вывод специальных символов unicode в консоль
C++ Записать в файл 255 однобайтовых символов в Unicode

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4324 / 3745 / 1260
Регистрация: 14.04.2014
Сообщений: 14,688
12.06.2014, 23:03     Чтение UNICODE символов из STDOUT процесса #2
И в чём была проблема-то?
Patron
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 2
16.06.2014, 15:10  [ТС]     Чтение UNICODE символов из STDOUT процесса #3
Проблема была в некорректной кодовой странице по умолчанию у запускаемого процесса. Изменение кодовой страницы командой chcp уже запущенного процесса исправило проблему. То есть после изменения кодовой страницы последующие кириллические символы начали считыватся корректно.
Yandex
Объявления
16.06.2014, 15:10     Чтение UNICODE символов из STDOUT процесса
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru