IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> как вывести BYTE
Янычар
сообщение 8.02.2012 10:51
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Подскажите пожалуйста как вывести переменную BYTE в окно win32 API. Я использую Crypto API и функция CryptGetHashParam(hHash, HP_HASHVAL, (BYTE*)hash_value, &count, 0); возвращает в переменной hash_value тип BYTE*. Так вот просто TextOut(hdc,0,0,hash_value,strlen(hash_value)); вот так вот вывести не получается...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 8.02.2012 11:57
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Сконвертировать число в строку (либо что-то из серии itoa, либо просто sprintf-ом "впечатать" число в символьный буфер), и уже строку выводить в окно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 8.02.2012 15:44
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Ладно, все равно не получается. Тогда другой вопрос. Ну совсем не получается использовать метод ReadFile из WinAPI. Вот последовательность действий:

HANDLE hFile1;
LPCWSTR dataToSignFile=L"C:\text.txt";
hFile1 = CreateFileW (dataToSignFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwFileSize = GetFileSize (hFile1, NULL);
TCHAR* szBuf2= static_cast<TCHAR*>(malloc(dwFileSize + 1));
//TCHAR* szBuf2=new TCHAR(dwFileSize + 1); в этом случае выводится пустая строка
ZeroMemory(szBuf2, dwFileSize + 1);
ReadFile (hFile1, szBuf2, dwFileSize, NULL, NULL);


Вот пытаюсь вывести:

MessageBoxW(hWnd,szBuf2,_T("hel"), MB_OK|MB_ICONERROR);


Выводится либо иероглифы либо вообще пустая строка. Вообщем не пойму что неправильно делаю...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 8.02.2012 16:23
Сообщение #4


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Во-первых, не хватает информации, в какой кодировке записан файл, который читается.

Во-вторых, MSDN не пробовал внимательно читать?
ReadFile function явно говорит, что
Цитата
lpNumberOfBytesRead [out, optional]

A pointer to the variable that receives the number of bytes read when using a synchronous hFile parameter. ReadFile sets this value to zero before doing any work or error checking. Use NULL for this parameter if this is an asynchronous operation to avoid potentially erroneous results.

This parameter can be NULL only when the lpOverlapped parameter is not NULL.
У тебя файл открывался без FILE_FLAG_OVERLAPPED, так что придется делать вот так:
	DWORD wasRead;
ReadFile (hFile1, szBuf2, dwFileSize, &wasRead, NULL);
по крайней мере.

Цитата
Ладно, все равно не получается.
Что там может не получаться? Как пробовал, показывай.

P.S. Совсем забыл еще один момент. Обратные слэши должны дублироваться, т.е. "C:\\text.txt";

Сообщение отредактировано: IUnknown - 8.02.2012 16:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 8.02.2012 17:18
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(IUnknown @ 8.02.2012 16:23) *

Во-первых, не хватает информации, в какой кодировке записан файл, который читается.

Во-вторых, MSDN не пробовал внимательно читать?
ReadFile function явно говорит, что
У тебя файл открывался без FILE_FLAG_OVERLAPPED, так что придется делать вот так:
	DWORD wasRead;
ReadFile (hFile1, szBuf2, dwFileSize, &wasRead, NULL);
по крайней мере.

Что там может не получаться? Как пробовал, показывай.

P.S. Совсем забыл еще один момент. Обратные слэши должны дублироваться, т.е. "C:\\text.txt";

Спасибо что занимаетесь мной, но видимо я чего-то не понимаю, скорее всего глупость какую-нибудь опять делаю и увидеть не могу, но все равно не получается.
И с флагом FILE_FLAG_OVERLAPPED и без него не получается и ReadFile как написано и как у меня тоже ни хрена. Файл был первоначально в ANSI, перекодировал его в UNICODE, все равно иероглифы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 8.02.2012 17:32
Сообщение #6


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата(Янычар @ 8.02.2012 16:18) *
И с флагом FILE_FLAG_OVERLAPPED и без него не получается и ReadFile как написано и как у меня тоже ни хрена. Файл был первоначально в ANSI, перекодировал его в UNICODE, все равно иероглифы.
Не воспроизводится.

Текстовый файл сохранен в ANSI, проект Юникодный:
Прикрепленное изображение
Что я не так делаю?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 8.02.2012 18:24
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Вижу что все так. Для справедливости повторил все что написано в коде, который видно на снимке, результат тот же. Пробовал и в Юникоде сохранять текстовый файл и в анси, все одно. Если что то в свойствах проекта установлен юникод. Вот еще раз код:

HANDLE hFile1;
LPCTSTR dataToSignFile=TEXT("C:\\text.txt");
hFile1 = CreateFileW (dataToSignFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwFileSize = GetFileSize (hFile1, NULL);
TCHAR* szBuf2= static_cast<TCHAR*>(malloc(dwFileSize + 1));
ZeroMemory(szBuf2, dwFileSize + 1);
DWORD wasRead;
ReadFile (hFile1, szBuf2, dwFileSize, &wasRead, NULL);
CloseHandle(hFile1);
MessageBoxW(hWnd,(LPCTSTR)szBuf2,_T("hel"), MB_OK|MB_ICONERROR);


Прикрепленное изображение

Сообщение отредактировано: Янычар - 8.02.2012 18:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 8.02.2012 18:44
Сообщение #8


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Краем глаза заметил stdafx.cpp в Блокноте. VisualC++? Я пас тогда. Мне ее никогда не удавалось уговорить делать так, как надо мне. Всегда делала так, как хочет она.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 8.02.2012 18:50
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(IUnknown @ 8.02.2012 18:44) *

Краем глаза заметил stdafx.cpp в Блокноте. VisualC++? Я пас тогда. Мне ее никогда не удавалось уговорить делать так, как надо мне. Всегда делала так, как хочет она.

Во весело) Это именно он. А я наивно думал что у них лучший компилятор... Чем пользуешься тогда?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 8.02.2012 19:12
Сообщение #10


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Почти всегда GCC (через Code::Blocks), иногда проверяю результат Билдером, чтоб быть уверенным, что оно работает так, как задумывалось.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 9.02.2012 9:24
Сообщение #11


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> А я наивно думал что у них лучший компилятор...

Лучший в каком смысле? Поддержки стандарта? А, ну-ну.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 9.02.2012 17:11
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(IUnknown @ 8.02.2012 19:12) *

Почти всегда GCC (через Code::Blocks), иногда проверяю результат Билдером, чтоб быть уверенным, что оно работает так, как задумывалось.

Вот весело. Видимо у меня мозги не оттуда растут... В Code::Blocks не могу разобраться как менюшку сделать, все вроде прально делаю: rc файл к преокту присоединяю, заголовочный файл тоже, ни фига. И с помощью Resource Builder и RCE и как в Visual Studio пробовал делать файлы ресурсов, ну ничего не получается...
P.S. Сразу после этого сообщения разобрался. Видно мозг из отпуска вернулся

Сообщение отредактировано: Янычар - 9.02.2012 17:17
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 9.02.2012 17:44
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


В Code::Block тоже не получается ничего, а точнее получается, но почти то же что и в вижуал студии. Компилячтор использую GNU GCC, пишу все как в работающем примере выше...
Проверил, ReadFile возвращает 0, то есть завершается с ошибкой, это крайне странно...

Сообщение отредактировано: Янычар - 9.02.2012 18:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 9.02.2012 18:10
Сообщение #14


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Хочешь, я присоединю свой EXE-шник, посмотри, заработает ли он у тебя (откомпилю для C:\text.txt)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 9.02.2012 18:12
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(IUnknown @ 9.02.2012 18:10) *

Хочешь, я присоединю свой EXE-шник, посмотри, заработает ли он у тебя (откомпилю для C:\text.txt)

давай, а если еще и исходник пришлешь будет вобще круто
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 9.02.2012 18:30
Сообщение #16


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Вот сам проект (хотя там же все дефолтное, я добавил только вывод MessageBox-а перед циклом обработки сообщений), там же TXT, на котором проверял. Этот же проект отработал и на Win7, так что я не понимаю, что у тебя происходит...


Прикрепленные файлы
Прикрепленный файл  folder.zip ( 19.9 килобайт ) Кол-во скачиваний: 189
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 9.02.2012 20:12
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Цитата(IUnknown @ 9.02.2012 18:30) *

Вот сам проект (хотя там же все дефолтное, я добавил только вывод MessageBox-а перед циклом обработки сообщений), там же TXT, на котором проверял. Этот же проект отработал и на Win7, так что я не понимаю, что у тебя происходит...

Спасибо большое. Оказалось вот что. Твой код один в один мой, одно лишь различие: он вне оконной функции. Так странно получилось что я CreateFile вызвал в начале функции WindowProcedure, а остальную последовательность действий была в обработчика кнопки меню, так вот почему то так не работает. Заработало когда я все перенес в обработчик. А почему так получается не понял, как будто дескриптор возвращаемый CreateFile в теле switch (message) обнуляется... Вообще обидно что из-за такого бреда я потерял уйму времени...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 29.04.2024 1:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"