gettype获取类名_delphi – 获取属于任何类型的单元名称(TRttiType)
我需要得到任何
TRttiType的單位(命名空間)的名稱.
到目前為止,我已嘗試過以下內(nèi)容.
1)使用PTypeData.UnitName,此解決方案有效,但僅當(dāng)TTypeKind為tkClass時(shí).
procedure ListAllUnits;
var
ctx : TRttiContext;
lType: TRttiType;
Units: TStrings;
begin
Units:=TStringList.Create;
try
ctx := TRttiContext.Create;
for lType in ctx.GetTypes do
if lType.IsInstance then //only works for classes
if Units.IndexOf(UTF8ToString(GetTypeData(lType.Handle).UnitName))<0 then
Units.Add(UTF8ToString(GetTypeData(lType.Handle).UnitName));
Writeln(Units.Text);
finally
Units.Free;
end;
end;
2)解析QualifiedName屬性,這個(gè)解決方案到目前為止工作正常,但我對(duì)此并不滿意.
procedure ListAllUnits2;
function GetUnitName(lType: TRttiType): string;
begin
Result := StringReplace(lType.QualifiedName,'.' + lType.Name,'',[rfReplaceAll])
end;
var
ctx: TRttiContext;
lType: TRttiType;
Units: TStrings;
begin
Units := TStringList.Create;
try
ctx := TRttiContext.Create;
for lType in ctx.GetTypes do
if Units.IndexOf(GetUnitName(lType)) < 0 then
Units.Add(GetUnitName(lType));
Writeln(Units.Text);
finally
Units.Free;
end;
end;
問題是,存在另一種可靠的方法來獲取任何TRttiType的單位名稱?
總結(jié)
以上是生活随笔為你收集整理的gettype获取类名_delphi – 获取属于任何类型的单元名称(TRttiType)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多核cpu应用场景_操作系统基础11-关
- 下一篇: access创建窗体特别慢_64位Acc