Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

FormatMessage и освобожение буфера   Найти похожие ветки 

 
Конст   (2005-10-12 21:34) [0]

Хотел уточнить: нужно освобождать буфер, если я вызываю функцию FormatMessage так:


procedure TForm1.Button1Click(Sender: TObject);
var
 lpMsgBuf: PChar;
begin
 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM+FORMAT_MESSAGE_ALLOCATE_BUFFER,nil,
   StrToInt(Edit1.Text),LANG_NEUTRAL,@lpMsgBuf,0,nil);
 Memo1.Text := lpMsgBuf;
 lpMsgBuf := nil; // это нужно ?
end;

Спасибо.


 
begin...end ©   (2005-10-12 21:39) [1]

> Конст   (12.10.05 21:34)

Ну, во-первых, не @lpMsgBuf, а просто lpMsgBuf.

А во-вторых, ответ на вопрос есть в MSDN:

FORMAT_MESSAGE_ALLOCATE_BUFFER 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.


 
Конст   (2005-10-12 22:06) [2]

Если просто lpMsgBuf без @ вылетает AV


 
Джо ©   (2005-10-12 22:44) [3]


> lpMsgBuf := nil; // это нужно ?

Это не нужно. Нужно LocalFree.


 
Конст   (2005-10-12 23:09) [4]

LocalFree(Cardinal(lpMsgBuf));

Маленький вопрос: выражение Cardinal(lpMsgBuf); возвращает хэндл обекта ? Просто в первый раз с таким сталкиваюсь... но все работает, т.е
GetLastError возвращает ERROR_SUCCESS


 
Джо ©   (2005-10-12 23:28) [5]


>  выражение Cardinal(lpMsgBuf); возвращает хэндл обекта

Нет, это просто приведение типа. LocalFree объявлена в windows.pas с параметром типа Cardinal (4-байтное целое) а lpMsgBuf у тебя объявлено как PChar. То есть указатель, то есть, тоже самое 4-байтное целое. Ну вот ты и используешь приведение одного типа к другому, одного и того же размера.


 
Конст   (2005-10-12 23:34) [6]

Понятно. Спасибо за ответы!


 
begin...end ©   (2005-10-13 08:15) [7]

> Конст   (12.10.05 22:06) [2]

Да, похоже, я ошибся. Извините.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.048 c
14-1132393898
x.pro
2005-11-19 12:51
2005.12.11
Что означает LOL?


11-1113242736
alex_s
2005-04-11 22:05
2005.12.11
добавление юнитов в форму


4-1128678334
Ботвин Дмитрий
2005-10-07 13:45
2005.12.11
Проблема с таймером


14-1132314922
Opilki_Inside
2005-11-18 14:55
2005.12.11
Полупрозрачность иконок


2-1133113159
Neosted
2005-11-27 20:39
2005.12.11
EXE файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский