GetMem, процедура
Синтаксис
procedure GetMem(var P: Pointer; Size: Longlnt);
 
Описание
  Процедура GetMem выделяет Size байт динамической памяти и сохраняет указатель 
  на выделенную область памяти в Р. Она не инициализирует выделенную память. GetMem 
  не является настоящей процедурой. 
 
Ошибки
 
 
Советы и приемы
  
    - Память, выделенная GetMem, не инициализируется. При создании строки, динамического 
      массива или Variant, следует вызвать Initialize 
      или обнулить область памяти процедурой FillChar.
 
     - При использовании встроенного менеджера памяти GetMern поддерживает многопоточность, 
      т. е. может быть вызвана из нескольких потоков одновременно (только в том 
      случае, если IsMultiThread равна True).
    
 - Создавать запись или массив фиксированного размера следует с помощью New, 
      а не GetMem.
 
     - Процедура GetMem обычно применяется для создания массива, размер которого 
      неизвестен на этапе компиляции. И хотя динамические массивы в значительной 
      степени исключили необходимость в использовании этой процедуры, она все 
      еще встречается в существующем коде Delphi.
  
  
 
Пример
// Создает серую палитру и возвращает дескриптор палитры. Хотя // можно создать палитру до 255 оттенков серого, многие видеоадаптеры // могут показывать только 15 или 16 битов на пиксел, т. е. 5 бит // для оттенка, или 32 различных серых оттенка, function CreateGrayScalePalette(NumShades: Byte) : HPalette; var   LogPalette: PLogPalette;   I: Integer; begin   // TLogPalette ухе содержит место для одного элемента палитры,   // поэтому выделяем память для NumShades-1 дополнительного   // элемента.   GetMem(LogPalette,          SizeOf(TLogPalette) + (NumShades-1)*SizeOf(TPaletteEntry));   try     LogPalette.palVersion := $300;     LogPalette.palNumEntries := NumShades;     // TLogPalette определяет массив palPalEntry с границами 0..0,     // поэтому выключаем проверку на границы диапазона для установки     // других границ массива. {$R-}     for I := 0 to NumShades-1 do       begin         LogPalette.palPalEntry[I].peRed  := I * 256 div NumShades;         LogPalette.palPalEntry[I].peGreen := I * 256 div NumShades;         LogPalette.palPaLEntry[I].peBlue := I * 256 div NumShades;         LogPalette.palPalEntry[I].peFlags := 0;       end; {$R+}     Result := CreatePalette(LogPalette);   finally     FreeMem(LogPalette)   end; end;
 
Смотрите также
Процедуры FillChar, FreeMem, 
Initialize, ReallocMem, 
функция GetMemory, SysGetMem.
 
 
 Нет комментариев. 
  
 
Оставить комментарий:
 |   
 |