【问题标题】:TypeCasting : what is difference between below 2 lines of code?TypeCasting:下面两行代码有什么区别?
【发布时间】:2015-06-04 07:40:58
【问题描述】:

下面两行代码有什么区别。两者都在尝试获取路径,一个正在工作,另一个正在抛出错误。我正在研究 Delphi-7

Path:= (((FFormOwner as TForm).Designer) as IDesigner).GetPrivateDirectory; --Working
Path:= IDesigner(TForm(FFormOwner).Designer).GetPrivateDirectory ;  --Error

以下是使用代码行获取路径的代码。

constructor TsampleComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FFormOwner:=TForm(Owner);
  if not (Owner is TForm) then
    repeat
      FFormOwner:=TForm(FFormOwner.Owner);
    until (FFormOwner is TForm) or (FFormOwner.Owner=nil);

  if (csDesigning in ComponentState) then
    Path:= (((FFormOwner as TForm).Designer) as IDesigner).GetPrivateDirectory
  else
    Path:=ExtractFilePath(Application.EXEName);
.
.

end;

【问题讨论】:

标签: delphi delphi-7


【解决方案1】:
IDesigner(TForm(FFormOwner).Designer)

这对Designer 进行了简单的重新解释。它将失败,因为Designer 的类型为IDesignerHook,与IDesigner 不同。

(FFormOwner as TForm).Designer) as IDesigner

这对IDesigner 执行运行时查询,并通过调用QueryInterface 来解决。这是获取与现有接口不同的接口的正确方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多