Начиная с версии 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;
По материалам http://delphi.3000.com
|