我可以从字符串中获取 PTypeInfo 吗?

发布于 2024-09-02 17:02:12 字数 339 浏览 4 评论 0原文

这可能会是“不”,但是有什么方法可以使用 Delphi 的 RTTI(旧式 RTTI 或 2010 扩展 RTTI)来传递包含类型名称的字符串,特别是枚举的名称类型,并让它给我该类型的 PTypeInfo 吗?我查看了 RTTI.pas 和 TypInfo.pas,没有看到任何可以做到这一点的函数,但我可能错过了一些东西。

我在寻找什么:

var
  info: PTypeInfo;
begin
  info := GetTypeInfoFromName('TComponentStyle');
end;

或者类似的东西。事实是,枚举类型的名称将被传入;它在编译时是不知道的。

This is probably going to be a "no", but is there any way I can use Delphi's RTTI, either old-school or the 2010 extended RTTI, to pass in a string containing the name of a type, specifically the name of an enumerated type, and have it give me the PTypeInfo for that type? I've looked through RTTI.pas and TypInfo.pas and I don't see any function that would do that, but I might have missed something.

What I'm looking for:

var
  info: PTypeInfo;
begin
  info := GetTypeInfoFromName('TComponentStyle');
end;

Or something like that. Thing is, the name of the enumerated type would be passed in; it wouldn't be known at compile time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云裳 2024-09-09 17:02:12

以下内容应与限定名称一起使用。

限定名称为:UnitName.TypeName

type
 ETypeNotFound = class(Exception);

function GetTypeInfoFromName(aTypeName : String) : pTypeInfo;
var
 C : TRttiContext;
 T : TRttiType;
begin
 T := C.FindType(aTypeName);
 if Not Assigned(T) then
    raise ETypeNotFound.CreateFmt('Type %s is not found',[aTypeName]);

 result := T.Handle;
end;

The following should work with the qualified name.

Qualified Name is: UnitName.TypeName

type
 ETypeNotFound = class(Exception);

function GetTypeInfoFromName(aTypeName : String) : pTypeInfo;
var
 C : TRttiContext;
 T : TRttiType;
begin
 T := C.FindType(aTypeName);
 if Not Assigned(T) then
    raise ETypeNotFound.CreateFmt('Type %s is not found',[aTypeName]);

 result := T.Handle;
end;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文