Einzelnen Beitrag anzeigen

karlkoch

Registriert seit: 26. Feb 2006
Ort: Leipzig
30 Beiträge
 
Delphi 10.4 Sydney
 
#1

Rückgabe von Interfaces an C++ DLL

  Alt 4. Jun 2009, 13:26
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
  Mit Zitat antworten Zitat