Delphi-Interface-Parameter wird nun anders behandelt
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());