[英]Delphi 2005, can't build Indy 10
我在IndyProtocols90
包中构建IdMessageHelper.pas
单元时收到错误。 LoadFromStream
和LoadFromFile
所有实例都声称签名存在问题:
[错误] 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时,我在博客上写了这个新增内容:
在您的情况下,错误消息抱怨第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.