相关疑难解决方法(0)

Delphi Rtti用于通用上下文中的接口

对于一个框架,我编写了一个包装器,它接受任何对象,接口或记录类型来探索其属性或字段.类声明如下:

TWrapper<T> = class 
private
  FType : TRttiType;
  FInstance : Pointer;
  {...}
public
  constructor Create (var Data : T);
end;
Run Code Online (Sandbox Code Playgroud)

在构造函数中,我尝试获取进一步处理步骤的类型信息.

constructor TWrapper<T>.Create (var Data : T);
begin
FType := RttiCtx.GetType (TypeInfo (T));
if FType.TypeKind = tkClass then
  FInstance := TObject (Data)
else if FType.TypeKind = tkRecord then
  FInstance := @Data
else if FType.TypeKind = tkInterface then
  begin
  FType := RttiCtx.GetType (TObject (Data).ClassInfo); //<---access violation
  FInstance := TObject (Data);
  end
else
  raise Exception.Create ('Unsupported type');
end;
Run Code Online (Sandbox Code Playgroud)

我想知道这个访问冲突是否是delphi编译器中的错误(我正在使用XE).在进一步调查之后,我写了一个简单的测试函数,它表明,要求类名也会产生这个异常:

procedure TestForm.FormShow (Sender …
Run Code Online (Sandbox Code Playgroud)

delphi generics interface rtti

6
推荐指数
1
解决办法
3481
查看次数

标签 统计

delphi ×1

generics ×1

interface ×1

rtti ×1