我正在与第三方图书馆合作。其中一个组件使用的结构具有从TInterfacedObject继承的通用基类。它们作为普通类从该泛型下降,提供必要的类型。如果我尝试在implements
中使用该类,那么我会得到F2084 Internal Error: AV0AE194EC-R00000000-0
编译器错误。
以下是一些要粘贴到控制台应用程序中的示例代码。
uses
System.SysUtils,
System.Classes;
type
ITestIntf = Interface
['{78910A8A-0FE0-473F-A199-3CD10BFC6295}']
procedure DoSomething;
end;
// The generic base class
TGenericBase<T: TComponent> = class(TInterfacedObject)
private
FObject: T;
public
constructor Create(AObject: T); virtual;
end;
TMyComponent = class(TComponent)
end;
// The descendant class that implements our interface
TAdapter = class(TGenericBase<TMyComponent>, ITestIntf)
public
procedure DoSomething;
end;
TProxyObject = class(TInterfacedObject, ITestIntf)
strict private
FMyAdapter: TAdapter;
public
property MyAdapter: TAdapter read FMyAdapter implements ITestIntf;
end;
constructor TGenericBase<T>.Create(AObject: T);
begin
inherited Create;
FObject := AObject;
end;
procedure TAdapter.DoSomething;
begin
// Not really doing anything
end;
我猜这是编译器的一个错误。如果我将基类更改为继承自TInterfacedObject的简单类,则代码编译良好。错误发生在32位和64位编译器中。
这是编译错误吗?