Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.034 c
8-1120935016
murtix
2005-07-09 22:50
2005.12.11
Gdi+ и Delphi 2005


8-1120762481
ronyn
2005-07-07 22:54
2005.12.11
Как к тексту добавить графику?


2-1132743597
Василий927
2005-11-23 13:59
2005.12.11
OnActivate/OnDeactivate не работают?


1-1131698101
kukuikar
2005-11-11 11:35
2005.12.11
Непонятный вес линии слоя (AutoCAD + Delphi)


2-1130507566
FYNJY
2005-10-28 17:52
2005.12.11
Использование CLIPS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский