我遇到了一些代码,当它将nil传递给期望TComponent的构造函数时抛出异常(EIntfCasterror Cast不支持),如下所示:
obj := SomeClass.Create(nil);
它所在的单位不包含表格,甚至TForm要求在调用其构造函数时将TComponent传递给它。如果存在任何东西,或者有办法让它接受零,我应该通过什么来代替零。
谢谢。
另外,我没有调用此方法的源代码,或者我只是通过它可以访问的表单。
编辑:修复了代码示例。
EDIT2:修正了代码示例,因为我第一次写这篇文章的时候还有第二个脑屁。
EDIT3:我也没有构造函数的代码。
答案 0 :(得分:2)
EIntfCastError
与构造函数中传递的所有者无关。这是因为你尝试将接口转换为你认为它支持的另一个接口,而实际上它不支持它。
MyNewInterface := MyInterface as IADifferentInterface;
即使在创建TForm时,您也永远不会必需传递所有者。以下代码完全合法:
var
MyForm: TForm1;
begin
MyForm := TForm1.Create(nil);
try
MyForm.ShowModal;
finally
MyForm.Free;
end
end;
这就是这个(尽管它非常愚蠢 - 但它说明了这一点):
implementation
var
Button: TButton;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button := TButton.Create(nil);
Button.Parent := Form1;
Button.Left := 10;
Button.Top := 10;
Button.Caption := 'Button';
Button.Name := 'MyDumbButton';
Button.OnClick := TheButtonClick;
end;
procedure TForm1.TheButtonClick(Sender: TObject);
begin
ShowMessage(TButton(Sender).Name + ' clicked');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Button.Free;
end;