gpt4 book ai didi

delphi - 初始化时获取当前包名称

转载 作者:行者123 更新时间:2023-12-03 18:30:18 25 4
gpt4 key购买 nike

我的应用程序动态加载提供我所需对象的实现的程序包。我有一个全局函数将对象类注册在用于动态创建实例的列表结构上。

procedure RegisterObjectStd(const APackageName, AObjectName: string; const AClass: TClass);


因此,我可以通过工厂方法创建引用特定上下文的实例

例:

function CreateObject(const APackageName, AObjectName: string): TObject;


有没有办法在初始化代码中以动态方式检索当前包(.bpl)的名称?

initialization
RegisterObjectStd(GetCurrentBplName, 'MyObjectName', TMyObjectClass);

最佳答案

使用GetPackageInfo中的System.SysUtils进行操作。调用有点麻烦,因此在这里我演示如何包装它以获得包名称:

procedure GetPackageNameInfoProc(const Name: string; NameType: TNameType; Flags: Byte; 
Param: Pointer);
begin
if NameType=ntDcpBpiName then begin
PString(Param)^ := Name;
end;
end;

function GetPackageName(Package: HMODULE): string;
var
Flags: Integer;
begin
// Flags should be an out param, but is a var, so this assignment is a little pointless
Flags := 0;
Result := '';
GetPackageInfo(Package, @Result, Flags, GetPackageNameInfoProc);
end;


您可以在进程中加载​​的任何运行时程序包上使用它。如果要在执行代码的程序包上调用它,请将 HInstance传递给 GetPackageName

关于delphi - 初始化时获取当前包名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41141886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com