ImageEn, unit hyieutils

TIEResourceExtractor.GetBuffer

TIEResourceExtractor.GetBuffer


Declaration

function GetBuffer(TypeIndex: integer; NameIndex: integer; var BufferLength: integer): pointer;
function GetBuffer(const TypeStr: AnsiString; const NameStr: AnsiString; var BufferLength: integer): pointer;
function GetBuffer(ResourceBookmark: TIEResourceBookmark; var BufferLength: integer): pointer;


Description

Returns memory buffer for the specified resource.

Parameter Description
TypeIndex Index of resource type. 0 is first resource type, TypesCount-1 is the last resource type
NameIndex Index of actual resource. 0 is first resource name, NamesCount-1 is the last resource name
BufferLength Field filled with the resulting buffer length (in bytes)
TypeStr Type as string, e.g. 'Bitmap', 'Cursor' or 'RCData'
NameStr Resource name as string, e.g. 'INTRESOURCE:100' or 'Hand'
ResourceBookmark A resource bookmark returned by GetResourceBookmark

The buffer must not be freed.


Examples

// Extract the first icon in Windows Explorer
re := TIEResourceExtractor.Create('C:\Windows\Explorer.exe');
try
  buffer := re.GetBuffer( 'Icon', 'INTRESOURCE:1', bufferLen );
  ImageEnView1.IO.Params.IsResource := True;
  if ImageEnView1.IO.LoadFromBuffer( buffer, bufferLen ) then
    ImageEnView1.IO.SaveToFile( 'D:\Explorer.ico' );
finally
  re.Free;
end;




// Load resource 143 of type "Bitmap" from current application
var
  re: TIEResourceExtractor;
  buffer: pointer;
  bufferLen: integer;
begin
  re := TIEResourceExtractor.Create( Application.ExeName );
  try
    buffer := re.GetBuffer('Bitmap', 'INTRESOURCE:143', bufferLen);
    ImageEnView1.IO.Params.IsResource := True;
    ImageEnView1.IO.LoadFromBuffer(buffer, bufferLen, ioBMP);
  finally
    re.Free;
  end;
end;


// Load the resource specified by "TypeIndex" and "NameIndex"
var
  buffer: pointer;
  bufferLen: integer;
begin
  buffer := m_ResourceExtractor.GetBuffer(resTypeIndex, resNameIndex, bufferLen);

  ImageEnView1.IO.Params.IsResource := true;

  if m_ResourceExtractor.FriendlyTypes[resTypeIndex] = 'Bitmap' then
    ImageEnView1.IO.LoadFromBuffer(buffer, bufferLen, ioBMP)
  else
  if m_ResourceExtractor.FriendlyTypes[resTypeIndex] = 'Cursor' then
    ImageEnView1.IO.LoadFromBuffer(buffer, bufferLen, ioCUR)
  else
  if m_ResourceExtractor.FriendlyTypes[resTypeIndex] = 'Icon' then
    ImageEnView1.IO.LoadFromBuffer(buffer, bufferLen, ioICO)
  else
    // We cannot use ioUnknown (autodect) for BMP, CUR and ICO because it is not possible to autodetect BMP, CUR and ICO when they are resources.
    ImageEnView1.IO.LoadFromBuffer(buffer, bufferLen, ioUnknown)  // for jpegs, GIF, etc...
end;