Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Оптимизация. Метод Марквардта http://www.cyberforum.ru/cpp-beginners/thread1206473.html
Дорогие форумчане. Выручите. Нужна помощь по методам оптимизации метода Марквардта. Не пойму, что я упустил. Программа выдает не те данные. Должно на выходе х6=(-0.01;0,03). а у меня берет другую...
C++ Построить упорядоченный по возрастанию третий массив слиянием двух заданных Заданные два упорядоченных по возрастанию одинаковых массива. Построить упорядоченный по возрастанию третий массив слиянием двух заданных. http://www.cyberforum.ru/cpp-beginners/thread1206471.html
Системное программирование. Работа с процессами и анонимным каналом C++
Есть задание .Программа порождает два процесса, один процесс пишет в неименованный канал, другой считывает из него информацию и записывает в файл. Есть программа. Текст программы: #include...
Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию C++
Значит есть одномерный массив из 10 чисел. Заполнен случайными значениями. Числа расположенные на нечетных позициях необходимо отсортировать по возрастанию. Числа расположенные на четных позициях...
C++ Обращение к элементам массива через биты некоторого числа http://www.cyberforum.ru/cpp-beginners/thread1206459.html
Пусть есть массив Mass из 10 элементов и число А = 510 = 0...0 01012. Мне надо обратиться к 0 и 2 элементам (или к 7 и 9 - это как посмотреть) массива Mass. Можно ли как-нибудь через биты числа А...
C++ Подсчитать количество тех элементов последовательности B, для которых нет равных среди элементов A Даны натуральные числа m и n и действительные числа a1,...,am (a1>a2>...>am), b1,...,bn. Составить программу подсчета количества тех bi, 1<=i<=n, для которых нет равных среди a1,...,am. подробнее

Показать сообщение отдельно
Patron
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 2

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

12.06.2014, 20:45. Просмотров 703. Ответов 2
Метки (Все метки)

У меня есть процесс (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 минут
Проблема решена, спасибо все кто посмотрел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.