суббота, 19 января 2013 г.

Delphi HInstance

Глобальная переменная SysInit.HInstance инициализируется для exe модуля в SysInit._InitExe вызовом HInstance := GetModuleHandle(nil)
Фактически значение данной переменной - это указатель на адрес в памяти по которому загружен PE модуль.
Используя этот адрес можно, например, получить дату сборки проекта, получив прямой доступ к PE заголовку файла в памяти:
function GetLinkDate: TDateTime;
begin
  Result := FileDateToDateTime
    (PInteger(
      PImageNtHeaders(
        Cardinal(PImageDosHeader(HInstance)._lfanew) +  HInstance)^
    .OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE]
    .VirtualAddress + HInstance + 4
    )^);
end;

Комментариев нет:

Отправить комментарий