[英]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.