Hallo,
folgendes Problem.
Ich habe in Delphi Interfaces und Klassen deklariert, die die Interfaces entsprechend implementieren. Zusätzlich habe ich eine
DLL in C++ geschrieben, die mit diesen Interfaces arbeitet. Ansich funktioniert das auch. Probleme gibt es jedoch, wenn ich ein Interface zurückgeben will, also z.B.
Delphi-Quellcode:
function GetObject: IFoo; stdcall;
begin
Result := TFoo.Create;
end;
Das führt immer zu einer
Access Violation. Ich habe bemerkt, dass bei einem Aufruf von GetObject unter Delphi "Result" einen Anfangswert von "nil" besitzt. Wird die Funktion aus der C++
DLL heraus aufgerufen, dann besitzt "Result" einen zufälligen Wertn, was bei einer Zuweisung an Result dann natürlich zu der
Access Violation führt.
Meine Frage daher:
Gibt es hier noch ein generelles Problem zwischen C++ und Delphi? Lassen sich Interfaces womöglich gar nicht so an C++ DLLs zurückgeben, weil das "Result" Verhalten unterschiedlich implementiert ist? Andere Codes lösen solche Rückgaben immer über out-Parameter. Das funktioniert bei mir dann auch, jedoch finde ich das unschöner.
Kann mir jemand dafür eine Erklärung geben?
karlkoch