簡體   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