X1008 Integer und HResult werden ausgetauscht (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)


Integer, Longint und HRESULT sind in Delphi kompatible Typen. In C++ sind sie jedoch nicht kompatibel und erzeugen unterschiedlich verkürzte C++ Parameternamen. Diese Meldung soll sicherstellen, dass es beim Linken von Objektdateien, die Sie mit dem Delphi-Compiler erzeugt haben, keine Probleme gibt. Wenn Sie eine Objektdatei compilieren, ergibt sich daraus ein Fehler. Andernfalls ist die Meldung als Warnung zu betrachten.

In diesem Beispiel werden die Schnittstelle und die Klassenmethoden unterschiedlich deklariert. Beide Methoden sind in Delphi äquivalent, nicht jedoch in 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.

Die einfachste Lösung ist, die unter class deklarierten Methoden mit den unter interface deklarierten Methoden abzugleichen, sodass sie identisch sind.

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.