Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FormatMessage, API-функция 
:(
    Опции темы
SmaLL
  Дата 11.2.2003, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Что-то не пойму никак.
Хочу получить описание ошибки после выполнения функции CreateFile.
В хелпе написано, что надо использовать FormatMessage.
Делаю так:
Код

var
 fm: DWORD;
 lpMsgBuf: string;

 SetLength(lpMsgBuf, 100);
 fm:= FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM,
       nil, GetLastError, LANG_SYSTEM_DEFAULT, PChar(lpMsgBuf), 100, nil);


Получаю fm = 25
А в lpMsgBuf = p>|.....

Без строки SetLength(lpMsgBuf, 100); вылетает эксепшн "Access violation in kernel32.dll".

Может что-нибудь подскажете ?


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
[auxx]
Дата 11.2.2003, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 2.2.2003

Репутация: нет
Всего: нет



Цитата
Без строки SetLength(lpMsgBuf, 100); вылетает эксепшн "Access violation in kernel32.dll".

Ага. Правильно.
Код

var
fm: DWORD;
lpMsgBuf: string;
lpMsgArrBuf:Array[0..100] of Char;

fm:= FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM,
      nil, GetLastError, LANG_SYSTEM_DEFAULT, lpMsgBufArr, 100, nil);
lpMsgBuf:=PChar(@lpMsgBufArr);

PM MAIL   Вверх
stab
Дата 11.2.2003, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



FORMAT_MESSAGE_ALLOCATE_BUFFER

Specifies that the lpBuffer parameter is a pointer to a PVOID pointer, and that the nSize parameter specifies the minimum number of TCHARs to allocate for an output message buffer. The function allocates a buffer large enough to hold the formatted message, and places a pointer to the allocated buffer at the address specified by lpBuffer. The caller should use the LocalFree function to free the buffer when it is no longer needed.


var
fm: Integer;
lpMsgBuf: PChar;

begin
fm := FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError, LANG_SYSTEM_DEFAULT, @lpMsgBuf, 100, nil);
MessageBox(Handle, lpMsgBuf, nil, MB_OK);
LocalFree(Cardinal(lpMsgBuf));
end;

Это сообщение отредактировал(а) cully - 11.2.2003, 06:30


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 11.2.2003, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



еще правельнее будет:
fm := FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError, LANG_SYSTEM_DEFAULT, @lpMsgBuf, 0, nil);



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
SmaLL
Дата 11.2.2003, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Цитата(cully @ 10.2.2003, 22:40)
еще правельнее будет:
fm := FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError, LANG_SYSTEM_DEFAULT, @lpMsgBuf, 0, nil);

Спасибо, работает.


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.