Как получить динамический пакет, из которого исходит TPersistentClass?

Мое приложение создано с использованием пакетов среды выполнения и загружает их с помощью LoadPackage. Затем используется функция GetClass. для получения типов классов.

var
  MyClass : TPersistentClass;
begin
  if(LoadPackage('.\PackageA.bpl') = 0) then
    raise Exception.Create('Error loading PackageA.bpl');
  if(LoadPackage('.\PackageB.bpl') = 0) then
    raise Exception.Create('Error loading PackageB.bpl');

  MyClass := GetClass('TMyClass');
end;

Есть ли способ получить имя пакета, из которого происходит MyClass?


person Fabrizio    schedule 15.03.2019    source источник
comment
В современных версиях Delphi TPresistentClass имеет доступный метод UnitName, но я боюсь, что в более старых версиях вам нужно наследовать свои классы от TObject хотя бы для того, чтобы иметь доступ к такому методу.   -  person SilverWarior    schedule 15.03.2019


Ответы (1)


Используйте функцию RTL FindClassHInstance(), чтобы получить дескриптор загруженного пакета, которому принадлежит тип класса, который возвращает GetClass(). Это будет тот же дескриптор, который возвращает LoadPackage().

Вы можете отслеживать дескрипторы загруженных пакетов самостоятельно или передать дескриптор Win32 API GetModuleFileName(), чтобы запросить у дескриптора путь и имя файла своего пакета.

person Remy Lebeau    schedule 15.03.2019