X1008 Integer と HRESULT が入れ替わっています (Delphi)
エラーと警告のメッセージ(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.