Внешний вид сайта:

Получить версию DLL

Начиная с версии 4.71 используется DllGetVersion, чтобы определить номер версии Shell и общих DLL. Эта функция может вызываться приложением, чтобы определить, какая версия DLL установлена на системе. Она возвращает структуру, которая содержит информацию о версии.

Примечание: DLL не обязательно экспортируют DllGetVersion, поэтому сначала проверьте это, прежде чем использовать это.

// DLLVERSIONINFO structure 
type 
  PDLLVerInfo=^TDLLVersionInfo; 
  TDLLVersionInfo=Record 
    cbSize,   // Размер структуры в байтах
    dwMajorVersion, // Major version of the DLL 
    dwMinorVersion, // Minor version of the DLL 
    dwBuildNumber, // Build number of the DLL 
    dwPlatformID: DWord; // Платформа DLL
end; 

var 
  DllGetVersion: function(
        dvi: PDLLVerInfo): PDLLVerInfo; stdcall; 

function GetDllVersion(DllName: string;
      var DLLVersionInfo: TDLLVersionInfo): Boolean; 
var 
  hInstDll: THandle; 
  p: pDLLVerInfo; 
begin 
  Result := False; 
  // Получить дескриптор модуля DLL
  hInstDll := LoadLibrary(PChar(DllName)); 
  if (hInstDll = 0) then Exit; 
  // Возвращает адрес экспортируемой функции (DLL)
  @DllGetVersion := GetProcAddress(hInstDll, 'DllGetVersion'); 
  // Если дескриптор неверный, очистить и выйти
  if (@DllGetVersion) = nil then 
  begin 
    FreeLibrary(hInstDll); 
    Exit; 
  end; 

  new(p); 
  try 
    ZeroMemory(p, SizeOf(p^)); 
    p^.cbSize := SizeOf(p^); 

    // Вызвать функцию DllGetVersion
    DllGetVersion(p); 
    DLLVersionInfo.dwMajorVersion := p^.dwMajorVersion; 
    DLLVersionInfo.dwMinorVersion := p^.dwMinorVersion; 

    @DllGetVersion := nil; 
    Result := True; 
  finally 
    dispose(P); 
  end; 
 // Освободить DLL
 FreeLibrary(hInstDll); 
end; 

Пример получения версии comctl32.dll

procedure TForm1.Button1Click(Sender: TObject); 
var 
  DLLVersionInfo: TDLLVersionInfo; 
begin 
 if not GetDllVersion('comctl32.dll',DLLVersionInfo) then 
 begin 
   DLLVersionInfo.dwMajorVersion := 4; 
   DLLVersionInfo.dwMinorVersion := 0; 
 end; 
 with DLLVersionInfo do 
   ShowMessage(Format('ComCtl Version: %d.%d / Build: %d',
         [dwMajorVersion, dwMinorVersion, dwBuildNumber])) 
end; 

Комментарии

Нет комментариев. Ваш будет первым!