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

Мое приложение построено с использованием пакетов времени выполнения и загружает их с помощью функции 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?

1 Ответ

3 голосов
/ 15 марта 2019

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

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

...