X1008 Integer と HRESULT が入れ替わっています (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動


Delphi では、Integer、Longint、HRESULT は互換型ですが、C++ ではこれらの型は互換性がなく、異なる形に変更された C++ パラメータ名が生成されます。Delphi コンパイラによって作成されたリンク オブジェクト ファイルで問題がないように、このメッセージは可能性のある問題について警告します。ソースをオブジェクト ファイルにコンパイルする場合、これはエラーとなります。そうでなければ、警告となります。

次の例では、インターフェイス メソッドとクラス メソッドの宣言が異なっています。これらは Delphi では同じものですが、C++ では別のものとして扱われます。

program Produce;
  uses Windows;

  type
    I0 = interface (IUnknown)
      procedure p0(var x : Integer);
    end;

    C0 = class (TInterfacedObject, I0)
      procedure p0(var x : HRESULT);
    end;

  procedure C0.p0(var x : HRESULT);
  begin
  end;

begin
end.

この問題の最も簡単な解決方法は、クラス宣言メソッドとインターフェイス宣言メソッドを、同じにすることです。

program Solve;

  uses Windows;

  type
    I0 = interface (IUnknown)
      procedure p0(var x : Integer);
    end;

    C0 = class (TInterfacedObject, I0)
      procedure p0(var x : Integer);
    end;

  procedure C0.p0(var x : Integer);
  begin
  end;

begin
end.