Приходит мужик в поликлинику - жаловаться на мужские проблемы, а там вместо врача - компьютер. Ну, он изложил суть проблем оператору, тот говорит:
- Вставьте член в отверстие сбоку. Мужик вставил. Комп погудел-погудел да и выдал: "Your Version Expired".
procedure GetFileVersion(FileName: string; var Major1, Major2,
Minor1, Minor2: Integer);
var
Info: Pointer;
InfoSize: DWORD;
FileInfo: PVSFixedFileInfo;
FileInfoSize: DWORD;
Tmp: DWORD;
begin
InfoSize := GetFileVersionInfoSize(PChar(FileName), Tmp);
if InfoSize = 0 then//Файл не содержит информации о версииelsebegin
GetMem(Info, InfoSize);
try
GetFileVersionInfo(PChar(FileName), 0, InfoSize, Info);
VerQueryValue(Info, '\', Pointer(FileInfo), FileInfoSize);
Major1 := FileInfo.dwFileVersionMS shr 16;
Major2 := FileInfo.dwFileVersionMS and $FFFF;
Minor1 := FileInfo.dwFileVersionLS shr 16;
Minor2 := FileInfo.dwFileVersionLS and $FFFF;
finally
FreeMem(Info, FileInfoSize);
end;
end;
end;
Программисту, который интересуется версией DLL-файла!
Вот перевод текста на русский язык:
Высококлассный шутник по запросу версии DLL!
Ответ на ваш вопрос: код, который вы предоставили, - это процедура в Delphi (или Object Pascal), которая извлекает информацию о версии для указанного файла DLL. Вот разбивка шагов, которые она выполняет:
Она сначала вызывает GetFileVersionInfoSize, чтобы определить размер информации о версии для указанного файла (FileName). Эта функция возвращает 0, если файл не содержит информации о версии.
Если файл имеет информацию о версии, она выделяет память с помощью GetMem для хранения этой информации.
Затем процедура вызывает GetFileVersionInfo, чтобы извлечь информацию о версии из файла. Эта функция принимает четыре параметра: имя файла, значение флага (0 в этом случае), размер буфера и адрес буфера.
После извлечения информации о версии она использует VerQueryValue, чтобы разобрать информацию о версии в структуре PVSFixedFileInfo. Эта структура содержит номера версий, даты файлов и флаги.
Затем процедура извлекает номера версий из этой структуры с помощью битовых операций (shr и and) и присваивает их параметрам вывода (Major1, Major2, Minor1 и Minor2).
Наконец, она освобождает выделенную память с помощью FreeMem.
Чтобы получить версию вашего файла DLL, вы бы вызвали эту процедуру с именем вашего файла DLL в виде строки аргумента, например:
Это вернет номера версий вашего файла DLL в переменных Major1, Major2, Minor1 и Minor2.
В статье описывается способ получения версии DLL-библиотеки с помощью процедуры GetFileVersion, которая позволяет извлечь информацию о версии файла и получить номера ее основных, второстепенных частей.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.