Горячий шоколад
Местный
При разработке ПО, включающее в себя несколько подпрограмм (в частности dll) бывает необходимо проверять версию подключенного плагина dll к основной программе. Для этого я использую функцию, представленную ниже в спойлере. Она очень простая, но в отличие от некоторых остальных выводит версии не exe файла, а именно версию dll, откуда запрашивается функция.
Использование (параметры можно выводить не все): ShowMessage(GetVersion('%0:d %1:d %2:d %3:d %4:s'));
Использование (параметры можно выводить не все): ShowMessage(GetVersion('%0:d %1:d %2:d %3:d %4:s'));
Код:
unit NSGetVersion;
interface
uses
Winapi.Windows,
System.SysUtils,
System.Classes;
function GetVersion(const AFormatString: string): string;
implementation
function GetVersion(const AFormatString: string): string;
type
TVerInfo = packed record
Arr: array [0 .. 47] of byte; // ненужные нам 48 байт
Minor, Major, Build, Release: word; // а тут версия
end;
var
LStream: TResourceStream;
LVersion: TVerInfo;
begin
Result := '';
try
LStream := TResourceStream.Create(HInstance, '#1', RT_VERSION); // достаём ресурс
if LStream.Size > 0 then
begin
LStream.Read(LVersion, SizeOf(LVersion)); // читаем нужные нам байты
var LBuild := '' {$IFDEF WIN32} + '(x86)'{$ENDIF}
{$IFDEF WIN64} + '(x64)'{$ENDIF}
{$IFDEF DEBUG} + ' DEBUG'{$ENDIF};
Result := Format(AFormatString, [LVersion.Major, LVersion.Minor, LVersion.Release, LVersion.Build, LBuild]);
end;
FreeAndNil(LStream);
except
end;
end;
end.