Delphi-Interface-Parameter wird nun anders behandelt

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Delphi-Interfaces


Ein Delphi-Interface-Parameter mit dem Standardwert nil wird ab dem Release C++Builder 2010 anders behandelt. Wird jetzt einem Delphi-Interface der Typ void * zugewiesen, wird der Code nicht compiliert.

Wenn ein Interface-Parameter den Standardwert nil hatte, erzeugte der Delphi-Compiler (DCC32) früher in der .hpp-Datei den folgenden Code:

  void methodName(_di_IIntf param = (void *)(0x0));

Der C++-Compiler hat früher fälschlicherweise diese Syntax akzeptiert. Ab dem Release 2010 behandeln der Delphi-Compiler und der C++-Compiler diesen Fall unterschiedlich.

Der Delphi-Compiler gibt jetzt für einen Interface-Parameter mit dem Standardwert nil in der .hpp-Datei folgenden Code aus:

  void methodName(_di_IIntf param = _di_IIntf());

Der C++-Compiler gibt jetzt einen Fehler für Code aus, der einem Delphi-Interface den Typ void * zuweist. Die Zeile

  void methodName(_di_IIntf param = (void *)(0x0));

wird nun nicht compiliert und der folgende Fehler ausgegeben:

  Cannot convert 'void *' to '_di_IIntf'M

Wenn Ihr Delphi-Code einen Interface-Parameter mit dem Standardwert nil enthält, müssen Sie ihn mit DCC32 erneut compilieren. Wenn Ihnen der Quellcode nicht vorliegt, bearbeiten Sie die .hpp-Datei und ändern alle Vorkommen wie:

  void methodName(_di_IIntf param = (void *)(0x0));

in:

  void methodName(_di_IIntf param = _di_IIntf());

Siehe auch