gpt4 book ai didi

delphi - 为什么GetType成功时FindType却获取不到RTTI?

转载 作者:行者123 更新时间:2023-12-03 15:46:45 24 4
gpt4 key购买 nike

我正在尝试使用 TRttiContext.FindType(QualifiedTypeName) 获取一个对象。这是我得到的:

program MissingRTTI;
{$APPTYPE CONSOLE}
uses System.SysUtils, RTTI, Classes;
type
TMyClass = class(TObject) end;
var
rCtx: TRttiContext;
rType: TRttiInstanceType;
begin
rCtx := TRttiContext.Create();
rType := rCtx.GetType(TypeInfo(TMyClass)) as TRttiInstanceType;
if (rType <> nil) then begin
WriteLn('Type found using TypeInfo');
end;
rType := rCtx.FindType(TMyClass.QualifiedClassName) as TRttiInstanceType;
if (rType <> nil) then begin
WriteLn('Type found using qualified class name.');
end;
ReadLn;
rCtx.Free();
end.

不幸的是,只有rCtx.GetType似乎能找到所需的类型。 (我还尝试使用 GetTypes 列出所有类型。所需的类型不会出现在结果数组中。)有人知道如何强制编译器为此类型发出 RTTI 吗?

最佳答案

您调用FindType方法不返回 Rtti 信息,因为此函数仅适用于公共(public)类型。因此,如果您检查 rType.IsPublicType属性返回值为 false 。

公共(public)类型必须在单元的接口(interface)部分声明(以被识别为公共(public))。因此,如果将 TMyClass 类定义移动到单元的接口(interface)部分,您将能够毫无问题地使用 FindType

关于delphi - 为什么GetType成功时FindType却获取不到RTTI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10600186/

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