如何获取一个TPersistentClass来自的动态包?

How to get the dynamic package from which a TPersistentClass comes from?

我的应用程序是使用 runtime packages and loads them by using the LoadPackage 函数构建的。 然后它使用 GetClass 函数获取 class 类型。

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 来自的包的名称吗?

使用 RTL FindClassHInstance() function to get the handle of the loaded package that owns the class type that GetClass() returns. This will be the same handle that LoadPackage() returns.

您可以自己跟踪加载的包句柄,也可以将句柄传递给 Win32 API GetModuleFileName() 函数以查询句柄以获取其包的路径和文件名。