Главная страница
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.48 MB
Время: 0.045 c
14-1132564096
stone
2005-11-21 12:08
2005.12.11
Долой кактусы, даешь пирамиды :))


14-1132559681
RaPToRidze
2005-11-21 10:54
2005.12.11
remote desktop


3-1130428514
Apachi
2005-10-27 19:55
2005.12.11
Доступ к данным через интернет ISAPI


8-1120831896
4ubaka
2005-07-08 18:11
2005.12.11
перевод изобрадений из jpg в bmp


2-1132643044
Juice
2005-11-22 10:04
2005.12.11
Как закрыть форму из ее же метода ?