delphi 编译时未验证辅助记录

2nc8po8w  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(99)

使用 Delphi 11.3(包括Patch 1)。
我为一个自定义Variant类型创建了一个Record Helper
我的助手记录正在工作,但是编译器在编译时不验证我的助手调用。

Type
  TTest = Type Variant;

  TTestHelper = Record Helper for TTest
  Public
    Function GetV: Variant;
    Function AsString: String;
  end;

{ TTestHelper }

function TTestHelper.GetV: Variant;
begin
  Result := Self;
end;

function TTestHelper.AsString: String;
begin
  Result := VarToStr(Self);
end;

//Simple button clik
procedure TForm5.Button1Click(Sender: TObject);
var
  V: TTest;
begin
  V := 'test';
  V := V.GetV; //Works as intended
  
  V := V.fopergkergprgkergtk4k3tp3gkg3p; //Compiles without any issue, but of course it gives an "Invalid Variant Operation" when I press the button.
end;

字符串
为什么编译器编译的代码显然是垃圾,为什么我的代码完成窗口没有显示我的任何方法(GetVAsString)?

p1iqtdky

p1iqtdky1#

为什么编译器编译的代码明显是垃圾代码
这是Variant的一个功能。
Variant可以包含不同的内容,包括一个到COM对象的IDispatch接口,该接口在运行时而不是在编译时“后期绑定”到函数/属性。COM对象可能会提供只能在执行阶段侦测到的function fopergkergprgkergtk4k3tp3gkg3p,因此编译器会允许Variant.之后的所有项目进行编译,而且会在执行阶段进行解析,因此可能会在执行阶段成功或失败。

相关问题