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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Оптимизация. Метод Марквардта http://www.cyberforum.ru/cpp-beginners/thread1206473.html
Дорогие форумчане. Выручите. Нужна помощь по методам оптимизации метода Марквардта. Не пойму, что я упустил. Программа выдает не те данные. Должно на выходе х6=(-0.01;0,03). а у меня берет другую точку.Этот результат я просчитал и он правильный, а вот с кодом не как. Да и в книге по методам оптимизации, тоже приведен пример с этим ответом. #include "stdafx.h" #include <stdio.h>...
C++ Построить упорядоченный по возрастанию третий массив слиянием двух заданных Заданные два упорядоченных по возрастанию одинаковых массива. Построить упорядоченный по возрастанию третий массив слиянием двух заданных. http://www.cyberforum.ru/cpp-beginners/thread1206471.html
Системное программирование. Работа с процессами и анонимным каналом C++
Есть задание .Программа порождает два процесса, один процесс пишет в неименованный канал, другой считывает из него информацию и записывает в файл. Есть программа. Текст программы: #include <windows.h> #include <conio.h> #include<iostream.h> #include<stdio.h> #define FF "lr.txt"
Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию C++
Значит есть одномерный массив из 10 чисел. Заполнен случайными значениями. Числа расположенные на нечетных позициях необходимо отсортировать по возрастанию. Числа расположенные на четных позициях необходимо отсортировать по убыванию. Сортировка вроде работает правильно, а вот диапазон чисел како-то не правильный берется :) #include <iostream> #include <cstdlib> #include <ctime>...
C++ Обращение к элементам массива через биты некоторого числа http://www.cyberforum.ru/cpp-beginners/thread1206459.html
Пусть есть массив Mass из 10 элементов и число А = 510 = 0...0 01012. Мне надо обратиться к 0 и 2 элементам (или к 7 и 9 - это как посмотреть) массива Mass. Можно ли как-нибудь через биты числа А получить доступ к элементам массива 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. Просмотров 627. Ответов 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 минут
Проблема решена, спасибо все кто посмотрел.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru