gpt4 book ai didi

Delphi 2005,无法构建 Indy 10

转载 作者:行者123 更新时间:2023-12-03 19:38:20 25 4
gpt4 key购买 nike

我在构建 IdMessageHelper.pas 时收到错误消息IndyProtocols90 中的单位包裹。 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单位介绍新LoadFrom...()SaveTo...() TIdMessage 的方法组件,添加 AUsesDotTransparency加载/保存电子邮件时的参数。

在 Delphi 2005 及更高版本中,它通过定义 class helper 来做到这一点。 (这是 Delphi 2005 中引入的一个功能)为 TIdMessage 添加新方法组件而无需修改 IdMessage.pas单位本身。这让 Indy 可以让人们使用熟悉的 IdMessage1.LoadFrom...()IdMessage1.SaveTo...()使用新功能时的语法 1。

这样做是为了不导致 IdMessage 中的界面中断更改。单位本身。我当时在博客上写了这个新添加的 IdMessageHelper.pas单位首先添加到 Indy:

New TIdMessage helper

在您的情况下,错误消息提示第 78 行:

AMsg.LoadFromStream(AStream, AHeadersOnly);

该行是新的 3 参数 TIdMessageHelper.LoadFromStream()方法试图调用预先存在的 2 参数 TIdMessage.LoadFromStream() AUsesDotTransparency 时的方法是真的:
procedure TIdMessage.LoadFromStream(AStream: TStream; const AHeadersOnly: Boolean = False);

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

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

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

1:在旧版本的 Delphi 中,类助手不可用, IdMessageHelper.pas还定义了几个独立的 TIdMessageHelper_LoadFrom...()TIdMessageHelper_SaveTo...()功能,所以人们仍然可以使用新的 AUsesDotTransparency功能,只是使用不太理想的调用语法。

编辑 : 事实证明,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.



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

关于Delphi 2005,无法构建 Indy 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com