繁体   English   中英

Delphi 2005,无法构建Indy 10

[英]Delphi 2005, can't build Indy 10

我在IndyProtocols90包中构建IdMessageHelper.pas单元时收到错误。 LoadFromStreamLoadFromFile所有实例都声称签名存在问题:

[错误] IdMessageHelper.pas(78):E2250没有可以使用这些参数调用的'LoadFromStream'的重载版本

procedure Internal_TIdMessageHelper_LoadFromStream(AMsg: TIdMessage; AStream: TStream;
  const AHeadersOnly: Boolean; const AUsesDotTransparency: Boolean);
var
  LMsgClient: TIdMessageClient;
begin
  if AUsesDotTransparency then begin
    AMsg.LoadFromStream(AStream, AHeadersOnly);
  end else
  begin
    // clear message properties, headers before loading
    AMsg.Clear;
    LMsgClient := TIdMessageClient.Create;
    try
      Internal_TIdMessageClientHelper_ProcessMessage(LMsgClient, AMsg, AStream, AHeadersOnly, False);
    finally
      LMsgClient.Free;
    end;
  end;
end;

我看到IdMessageHelper对于这个版本是新的,但是被调用的方法(例如IdMessage.LoadFromStream ),它的参数没有从最后几个版本改变 - 至少不是我拥有源的版本。

procedure TIdMessage.LoadFromStream(AStream: TStream; const AHeadersOnly: Boolean = False);
var
  LMsgClient: TIdMessageClient;
begin
  // clear message properties, headers before loading
  Clear;
  LMsgClient := TIdMessageClient.Create;
  try
    LMsgClient.ProcessMessage(Self, AStream, AHeadersOnly);
  finally
    LMsgClient.Free;
  end;
end;

我很确定我删除了所有以前的版本和软件包,因为这是D2005的干净安装。

IdMessageHelper单元引入了新的LoadFrom...()SaveTo...()的方法TIdMessage组件,添加一个AUsesDotTransparency加载/保存电子邮件时参数。

在2005年Delphi和之后,它通过定义一个执行此类助手 (其在2005年的Delphi引入的功能),以添加新的方法到TIdMessage部件,而不必修改IdMessage.pas单元本身。 这允许Indy在使用新功能时让人们使用熟悉的IdMessage1.LoadFrom...()IdMessage1.SaveTo...()语法1

事情是这样完成的,以免导致IdMessage单元本身的界面破坏变化。 IdMessageHelper.pas单元首次添加到Indy时,我在博客上写了这个新增内容:

新的TIdMessage帮助程序

在您的情况下,错误消息抱怨第78行:

AMsg.LoadFromStream(AStream, AHeadersOnly);

该行是新的3参数TIdMessageHelper.LoadFromStream()尝试调用预先存在的2参数方法TIdMessage.LoadFromStream()方法时AUsesDotTransparency为True:

procedure TIdMessage.LoadFromStream(AStream: TStream; const AHeadersOnly: Boolean = False);

我在后来的Delphi版本中测试了这个新的类助手,它对我来说很好。 您不应该收到编译器错误,因为不应该有任何歧义。

但是,我没有专门测试Delphi 2005中的类助手(因为我没有安装该版本),因此编译器错误可能表明类助手(当时是一种新的语言功能)仍然存在一辆小马车,后来修好了。

如果找不到歧义的原因,可以通过修改IdMessageHelper.pas来解决问题, HAS_CLASS_HELPER为Delphi 2005 1 IdMessageHelper.pas定义HAS_CLASS_HELPER ,然后再次重新编译Indy。

1 :在Delphi的旧版本中,类助手不可用, IdMessageHelper.pas还定义了几个独立的IdMessageHelper.pas TIdMessageHelper_LoadFrom...()TIdMessageHelper_SaveTo...()函数,因此人们仍然可以使用新的AUsesDotTransparency功能,只需少量 - 期望的调用语法。


编辑 :事实证明,Delphi 2005中的类帮助程序非常错误, 直到Delphi 2006才正式支持

现在已经在Win32编译器中正式引入了类助手[在Delphi 2006中]。 在Delphi 2005中, 类帮助程序没有正式可用,虽然你可以使用它们但实际上它们非常多 在使用它们时很容易出现内部编译器错误,没有什么可以向Borland抱怨的,因为这个功能没有得到官方的支持

所以,我现在已经在Delphi 2005中禁用了TIdMessageHelper助手类,并相应地更新了上面提到的博客文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM