Delphi 2005 年,无法构建 Indy 10
Delphi 2005, can't build Indy 10
我在 IndyProtocols90
包中构建 IdMessageHelper.pas
单元时收到错误消息。 LoadFromStream
和 LoadFromFile
的所有实例都声称签名存在问题:
[Error] IdMessageHelper.pas(78): E2250 There is no overloaded version of 'LoadFromStream' that can be called with these arguments
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
单元为TIdMessage
组件引入了新的LoadFrom...()
和SaveTo...()
方法,在loading/saving时添加一个AUsesDotTransparency
参数电子邮件。
在 Delphi 2005 及之后的版本中,它通过定义 class helper(这是 Delphi 2005 中引入的功能)来向 TIdMessage
组件而无需修改 IdMessage.pas
单元本身。这允许 Indy 在使用新功能 1.
时让人们使用熟悉的 IdMessage1.LoadFrom...()
和 IdMessage1.SaveTo...()
语法
这样做是为了不引起 IdMessage
单元本身的接口中断更改。在 IdMessageHelper.pas
单元首次添加到 Indy 时,我在博客中介绍了这个新增功能:
在您的情况下,错误消息是关于第 78 行的抱怨:
AMsg.LoadFromStream(AStream, AHeadersOnly);
该行是新的 3 参数 TIdMessageHelper.LoadFromStream()
方法,当 AUsesDotTransparency
为 True 时试图调用预先存在的 2 参数 TIdMessage.LoadFromStream()
方法:
procedure TIdMessage.LoadFromStream(AStream: TStream; const AHeadersOnly: Boolean = False);
我已经在以后的 Delphi 版本中测试了这个新的 class 助手,它对我来说工作正常。你不应该得到一个编译器错误,因为不应该有任何歧义。
但是,我没有在 Delphi 2005 中专门测试 class 助手(因为我没有安装那个版本),所以编译器错误可能表明 class helpers(当时是一个新的语言特性)仍然有一些问题,后来被修复了。
如果找不到歧义的原因,可以通过修改 IdMessageHelper.pas
取消定义 HAS_CLASS_HELPER
for Delphi 2005 1 来解决此问题,然后重新编译 Indy。
1:在 Delphi 的旧版本中 class 助手不可用,IdMessageHelper.pas
还定义了几个独立的 TIdMessageHelper_LoadFrom...()
和 TIdMessageHelper_SaveTo...()
函数,因此人们仍然可以使用新的 AUsesDotTransparency
功能,只是调用语法不太理想。
编辑:事实证明,class 助手在 Delphi 2005 年非常有问题,were not officially supported until Delphi 2006:
Class helpers have now been formally introduced in the Win32 compiler [in Delphi 2006]. In Delphi 2005 class helpers were not formally available, and although you could use them they were actually quite buggy. It was quite easy to get internal compiler errors while using them, nothing you could complain to with Borland about as this feature was not officially supported.
所以,我现在在 Delphi 2005 中禁用了 TIdMessageHelper
助手 class,并相应地更新了上述博客文章。
我在 IndyProtocols90
包中构建 IdMessageHelper.pas
单元时收到错误消息。 LoadFromStream
和 LoadFromFile
的所有实例都声称签名存在问题:
[Error] IdMessageHelper.pas(78): E2250 There is no overloaded version of 'LoadFromStream' that can be called with these arguments
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
单元为TIdMessage
组件引入了新的LoadFrom...()
和SaveTo...()
方法,在loading/saving时添加一个AUsesDotTransparency
参数电子邮件。
在 Delphi 2005 及之后的版本中,它通过定义 class helper(这是 Delphi 2005 中引入的功能)来向 TIdMessage
组件而无需修改 IdMessage.pas
单元本身。这允许 Indy 在使用新功能 1.
IdMessage1.LoadFrom...()
和 IdMessage1.SaveTo...()
语法
这样做是为了不引起 IdMessage
单元本身的接口中断更改。在 IdMessageHelper.pas
单元首次添加到 Indy 时,我在博客中介绍了这个新增功能:
在您的情况下,错误消息是关于第 78 行的抱怨:
AMsg.LoadFromStream(AStream, AHeadersOnly);
该行是新的 3 参数 TIdMessageHelper.LoadFromStream()
方法,当 AUsesDotTransparency
为 True 时试图调用预先存在的 2 参数 TIdMessage.LoadFromStream()
方法:
procedure TIdMessage.LoadFromStream(AStream: TStream; const AHeadersOnly: Boolean = False);
我已经在以后的 Delphi 版本中测试了这个新的 class 助手,它对我来说工作正常。你不应该得到一个编译器错误,因为不应该有任何歧义。
但是,我没有在 Delphi 2005 中专门测试 class 助手(因为我没有安装那个版本),所以编译器错误可能表明 class helpers(当时是一个新的语言特性)仍然有一些问题,后来被修复了。
如果找不到歧义的原因,可以通过修改 IdMessageHelper.pas
取消定义 HAS_CLASS_HELPER
for Delphi 2005 1 来解决此问题,然后重新编译 Indy。
1:在 Delphi 的旧版本中 class 助手不可用,IdMessageHelper.pas
还定义了几个独立的 TIdMessageHelper_LoadFrom...()
和 TIdMessageHelper_SaveTo...()
函数,因此人们仍然可以使用新的 AUsesDotTransparency
功能,只是调用语法不太理想。
编辑:事实证明,class 助手在 Delphi 2005 年非常有问题,were not officially supported until Delphi 2006:
Class helpers have now been formally introduced in the Win32 compiler [in Delphi 2006]. In Delphi 2005 class helpers were not formally available, and although you could use them they were actually quite buggy. It was quite easy to get internal compiler errors while using them, nothing you could complain to with Borland about as this feature was not officially supported.
所以,我现在在 Delphi 2005 中禁用了 TIdMessageHelper
助手 class,并相应地更新了上述博客文章。