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

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

エラーと警告のメッセージ(Delphi):インデックス への移動


Integer,Longint および HRESULT は,Delphi では互換性のある型ですが,C++ ではこれらは非互換であり,異なる名前に変形されるパラメータ名が作成されます。Delphi コンパイラで作成したオブジェクトファイルのリンクで問題が出ないようにするために,このメッセージは可能性のある問題についての注意を促しています。ソースをオブジェクトファイルにコンパイルする場合,これはエラーになります。それ以外の場合には,警告となります。


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.

この例では,インターフェースとクラスのメソッドがそれぞれ宣言されています。この 2 つのメソッドは Delphi では同じものですが,C++ では別のものとして扱われます。


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.

簡単な解決方法としては,クラス宣言のメソッドとインターフェース宣言のメソッドを同じにします。