WAYFARER писал(а):Что то вы похоже где то перемудрили, если у вас в принципе такая проблема встала.
Вы делаете библиотеку, которую использует некое стороннее приложение? Если обязательно нужно проверять версии библиотеки, что мешает добавить функцию? прямо в этой же библиотеки. Что то типа
- Код: Выделить всё
function GetVersion (): Pchar; stdcall;
begin
result := Pchar('1.1.3');
end;
и меняйте версию при каждом новом релизе либы.
Менять вручную ?? Не наш метод
Добавлено спустя 2 минуты 52 секунды:mrPG писал(а):Поскольку библиотеку создаю я сам, то информация о номере версии в файлах и приложения, и библиотеки есть.
Кто вам сказал, что она есть? почитайте про структуру elf файлов.
Можно и почитать, но для приложения, которое обращается к библиотеке, на fpc/Lazarus номер версии прекрасно определяется с помощью TFileVersionInfo с определением имени файла через paramstr(1), Для библиотеки определить имя файла из программы не получается
Добавлено спустя 3 минуты 39 секунд:Alexx2000 писал(а):Если и программа и библиотека на FPC, то версию можно прочитать так:
- Код: Выделить всё
uses
Resource, elfreader, ...
...
function GetFileVersion(const FileName: String): String;
var
Version: TVersionInfo;
begin
Version:= TVersionInfo.Create;
try
Version.Load(FileName);
with Version.FixedInfo do
Result:= Format('%d.%d.%d', [FileVersion[0], FileVersion[1], FileVersion[2]]);
except
Result:= EmptyStr;
end;
Version.Free;
end;
...
initialization
TResources.RegisterReader('.so', TElfResourceReader);
где FileName полный путь к библиотеке.
В этом случае надо задавать полный путь к библиотеке, а он на разных ПК может различаться.
Конечно есть вариант сделать ini-файл, из которого считывать этот путь, но хотелось решить это программно.
Добавлено спустя 33 минуты 26 секунд:Alexx2000 писал(а):Если и программа и библиотека на FPC, то версию можно прочитать так:
- Код: Выделить всё
uses
Resource, elfreader, ...
...
function GetFileVersion(const FileName: String): String;
var
Version: TVersionInfo;
begin
Version:= TVersionInfo.Create;
try
Version.Load(FileName);
with Version.FixedInfo do
Result:= Format('%d.%d.%d', [FileVersion[0], FileVersion[1], FileVersion[2]]);
except
Result:= EmptyStr;
end;
Version.Free;
end;
...
initialization
TResources.RegisterReader('.so', TElfResourceReader);
где FileName полный путь к библиотеке.
К сожалению, для *.so получаю сообщение No version info load ((