2016-09-06 13 views
1

IndyProtocols90パッケージにIdMessageHelper.pasユニットを構築する際にエラーが発生します。 LoadFromStreamLoadFromFileのすべてのインスタンスは、署名に問題があると主張されていますDelphi 2005は、インディを構築できません。

[エラー] IdMessageHelper.pas(78):E2250これらの引数で呼び出すことができます「LoadFromStream」のないオーバーロードされたバージョンではありません

少なくともいないもののために - 私は IdMessageHelperは、このバージョンに新しいですが、(例えば IdMessage.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; 

私には源がある。

これはD2005のクリーンインストールだったので、以前のバージョンとパッケージをすべて削除したことは間違いありません。

答えて

3

IdMessageHelperユニットが電子メールを保存/ロード時AUsesDotTransparencyパラメータを追加する、TIdMessageコンポーネントの新しいLoadFrom...()SaveTo...()方法を導入します。デルファイ2005年

以降、それはIdMessage.pasユニット自体を変更することなくTIdMessageコンポーネントに新しいメソッドを追加する(デルファイ2005年に導入された機能である)class helperを定義することによってこれを行います。これにより、Indyは、新しい機能を使用するときに、使い慣れたIdMessage1.LoadFrom...()IdMessage1.SaveTo...()の構文を使用できるようになります。

IdMessageユニット自体にインタフェースが破損しないようにしました。私はIdMessageHelper.pasユニットが最初のインディに追加された時点で、この新しい追加についてブログ:あなたのケースでは

New TIdMessage helper

、エラーメッセージがライン78文句を言っている:

AMsg.LoadFromStream(AStream, AHeadersOnly); 

ラインであること

procedure TIdMessage.LoadFromStream(AStream: TStream; const AHeadersOnly: Boolean = False); 
AUsesDotTransparencyがtrueの場合、既存の2パラメータ TIdMessage.LoadFromStream()メソッドを呼び出そうと新しい3パラメータ TIdMessageHelper.LoadFromStream()方法

これ以降のDelphiのバージョンでこの新しいクラスヘルパーをテストしたところ、うまく動作します。あいまいさがあってはいけないので、コンパイルエラーを受け取ってはいけません。

しかし、Delphi 2005のクラスヘルパーを特にテストしていません(そのバージョンがインストールされていないため)。コンパイラエラーがクラスヘルパー時間)はまだ少しバギーで、後で修正されました。

あなたはあいまいさの原因を見つけることができない場合、あなたは、Delphi 2005 ためHAS_CLASS_HELPERを未定義し、再度インディを再コンパイルするIdMessageHelper.pasを変更することで問題を回避することができます。

:人々はまだちょうどあまり望ましく呼び出し構文で、新しいAUsesDotTransparency機能を利用することができますので、クラスヘルパーが利用できないデルファイの古いバージョンでは、IdMessageHelper.pasはまた、いくつかのスタンドアロンTIdMessageHelper_LoadFrom...()TIdMessageHelper_SaveTo...()関数を定義しています。


EDIT:それはそのクラスヘルパーは、Delphi 2005で非常にバグがあっ判明し、were not officially supported until Delphi 2006

クラスヘルパーは、現在正式に[デルファイ2006年に]のWin32コンパイラで導入されています。 Delphi 2005では、クラスヘルパーは正式には利用できませんでしたが、それらを使用することはできましたが、実際にはかなりバグがありました。内部コンパイラエラーを得るのはかなり簡単でしたが、については、ボーランドには何も文句を言うことができませんでした。この機能は公式にはサポートされていません

したがって、デルファイ2005でTIdMessageHelperヘルパークラスを無効にして、上記のブログ記事を適宜更新しました。

+0

問題は 'IdMessageHelper.pas'と' IdIMAP4.pas'にあります。私は単にチェックを '{$ IFDEF VCL_2006_OR_ABOVE}'に変更して動作しました。ありがとうございました。 – fourwhey

+0

クラスヘルパーはD2005で導入されました。なぜなら、D2005でコードが機能しない理由を理解したいと思います(特に、78行目でしか失敗しないので、右から50行目が 'TIdMessage'メソッドにオーバーロードされますそれは失敗しない、そう?)。 –

+0

'LoadFrom ... Ex()'と 'SaveTo ... Ex()')に 'IdMessageHelper.pas'のヘルパーメソッドの名前を変更しても、50行目の元の' TIdMessage'メソッドそして78、問題はD2005で消えていますか? –

関連する問題