{ **** UBPFD *********** by kladovka.net.ru ****
>>
Функция предназначена для определение версии системных DLL. Кодирование версии осуществляется вспомогательной функцией MakeVersion (см. код).
Зависимости: Windows
Автор: Almaz, az_spb@mail.ru, Санкт-Петербург
Copyright: Собственное написание Almaz
Дата: 12 мая 2002 г.
********************************************** }
function MakeVersion(Major, Minor: Word): Integer; // Функция кодирование версии
begin
Result := MAKELONG(Minor, Major);
end;
function GetDllVersion(FileName: PChar): Integer;
type
TDllVersionInfo = packed record
cbSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwBuildNumber: DWORD;
dwPlatformID: DWORD;
end;
PDllVersionInfo = ^TDllVersionInfo;
var
Lib: THandle;
DllGetVersion: function (Info: PDllVersionInfo): HRESULT; stdcall;
Info: TDllVersionInfo;
WasLoaded: Boolean;
begin
Result := 0;
try
// Получение ссылки на DLL, если она уже загружена
Lib := GetModuleHandle(FileName);
if Lib = 0 then
begin
// Загрузка DLL, если она еще не загружена
Lib := LoadLibrary('SHELL32.DLL');
WasLoaded := True;
end else WasLoaded := False;
if Lib <> 0 then
try
// Получение адреса функции DllGetVersion
DllGetVersion := GetProcAddress(Lib, 'DllGetVersion');
if Assigned(DllGetVersion) then
begin
// Подготовка структуры для функции
ZeroMemory(@Info, SizeOf(Info));
Info.cbSize := SizeOf(Info);
// Вызов функции DllGetVersion
if DllGetVersion(@Info) = NOERROR then
Result := MakeVersion(Info.dwMajorVersion, Info.dwMinorVersion);
end;
finally
// Если DLL была загружена этой функцией - то выгружаем
if WasLoaded then FreeLibrary(Lib);
end;
except
end;
end;
Пример использования:
Code:
// Закодированные MakeVersion версии можно просто сравнивать
if GetDLLVersion('SHELL32.DLL') > MakeVersion(5, 0) then
...
// Вот так можно вывести версию DLL
var
V: Integer;
begin
V := GetDLLVersion('SHLDOC32.DLL');
ShowMessage(IntToStr(HIWORD(V)) + '.' + IntToStr(LOWORD(V)));
end;
Программа на Delphi, которая определяет версию системных DLL (Dynamic Link Libraries) на платформах Windows. Код включает в себя два основные функции: MakeVersion и GetDllVersion.
Функция MakeVersion принимает два параметра - Major и Minor, которые представляют собой номера основных и второстепенных версий DLL, и возвращает целочисленное значение, которое комбинирует эти две версии.
Функция GetDllVersion получает информацию о версии указанного файла DLL. Она использует функцию GetModuleHandle для загрузки DLL в память, если она не была уже загружена. Если DLL успешно загружена, она вызывает функцию GetProcAddress для получения адреса функции DllGetVersion внутри DLL.
Функция DllGetVersion заполняет структуру информацией о версии DLL и возвращает код ошибки. Функция GetDllVersion затем использует эту информацию для вызова функции MakeVersion, которая комбинирует номера основных и второстепенных версий в одиночное целочисленное значение.
Вот разбор кода:
functionMakeVersion(Major,Minor:Word):Integer;beginResult:=MAKELONG(Minor,Major);end;functionGetDllVersion(FileName:PChar):Integer;typeTDllVersionInfo=packedrecordcbSize:DWORD;dwMajorVersion:DWORD;dwMinorVersion:DWORD;dwBuildNumber:DWORD;dwPlatformID:DWORD;end;PDllVersionInfo=^TDllVersionInfo;varLib:THandle;DllGetVersion:function(Info:PDllVersionInfo):HRESULT;stdcall;Info:TDllVersionInfo;WasLoaded:Boolean;beginResult:=0;try// Get the handle of the DLL, if it's already loadedLib:=GetModuleHandle(FileName);ifLib=0thenbegin// Load the DLL, if it's not already loadedLib:=LoadLibrary('SHELL32.DLL');WasLoaded:=True;endelseWasLoaded:=False;ifLib<>0thentry// Get the address of the DllGetVersion functionDllGetVersion:=GetProcAddress(Lib,'DllGetVersion');ifAssigned(DllGetVersion)thenbegin// Prepare a structure for the DllGetVersion functionZeroMemory(@Info,SizeOf(Info));Info.cbSize:=SizeOf(Info);// Call the DllGetVersion functionifDllGetVersion(@Info)=NOERRORthenResult:=MakeVersion(Info.dwMajorVersion,Info.dwMinorVersion);end;finally// If the DLL was loaded by this function, unload itifWasLoadedthenFreeLibrary(Lib);end;exceptend;end;// Example usage:ifGetDLLVersion('SHELL32.DLL')>MakeVersion(5,0)then...
В примере использования кода вы можете сравнить версию DLL с конкретной версией с помощью функции MakeVersion. Вы также можете использовать функцию GetDllVersion для получения версии DLL и отображения ее в сообщении.
Это базовая реализация проверки версии DLL и может требовать модификаций в зависимости от вашего конкретного требования.
Определение версии системных DLL - функция, предназначенная для определения версии системных DLL на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.