Entwickler-Ecke
Windows API - Delphi/C++ DLL-Problem
MrCoder - Sa 14.04.07 19:26
Titel: Delphi/C++ DLL-Problem
Hi,
hab lange nichts mehr zu diesem Forum beigesteuert und darum direkt mal eine kompliziertere Frage:
Problem: Ich versuche in Delphi folgende DLL zu schreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| library dlltest;
type IMyClass = interface procedure A; stdcall; procedure B; stdcall; end;
TMyClass = class(TInterfacedObject, IMyClass) public procedure A; stdcall; procedure B; stdcall; end;
procedure TMyClass.A; begin WriteLn('A aufgerufen'); end;
procedure TMyClass.B; begin WriteLn('B aufgerufen'); end;
function GetMyClass: IMyClass; stdcall; begin Result := TMyClass.Create; end;
exports GetMyClass;
begin end; |
Die Funktion GetMyClass wird exportiert und kann aus einer EXE heraus aufgerufen werden, um
den Zeiger auf das Interface IMyClass zu bekommen.
Diese DLL möchte ich gerne aus eine C++ Programm einbinden (GNU-C, nicht VC++).
Wie sieht die Headerdatei dafür aus? Was ist das C++ äquivalent zu "type IMyClass = interface ... end"?
Danke schonmal ;D
Bernhard Geyer - So 15.04.07 10:11
So geht das gar nicht. Delphi Interfaces können nicht von C++ aufgerufen werden.
Du hast 2 Möglichkeiten:
1, Verpacke deine Funktionaltität in eine Automatisierungsklasse so das per COM Kompoatiblität hergestellt wird
(Nachteil: Delphi-COM-DLL muß mit Adminrechten installiert werden
2, Du definierst eine C-Like-Schnittstelle indem du mit Handels arbeitest (Am einfachsten indem du deine Instanz-Referenzen (Nicht die Interfaces) als Integer castest und dies als Funktionen zurückgibst. Brauchst damit für jede Methode der Klasse eine eigene Funktion
tommie-lie - So 15.04.07 10:45
3. Du benutzt das C-Interface zu Interfaces, Dokumentation dazu findet sich bei Google und im MSDN.
4. Du benutzt einen anderen C++-Compiler, der mit COM-Interfaces (nichts anderes sind die Interfaces aus Delphi) zurechtkommt. MSVC++ und der BCB sind die beiden mir bekannten Compiler, die das drauf haben. Die Syntax dabei ist implementationsabhängig, da Implementationserweiterung zum C++-Standard, ähnlich wie __property aus dem BCB. Ich glaube im MSVC++ ist es einfach nur eine abstrakte Klasse, aber das sollte alles in der Dokumentation des Compilers stehen.
MrCoder - So 15.04.07 13:36
Danke für eure Antworten,
mir scheint unterdessen mein erster Plan, das Problem zu lösen um einiges einfacher als
verzweifelt an Interfaces fest zu halten. Auch wenn das also klappen würde, dann kämen
nur bestimmte Compiler in Frage - ich will jedoch die Kompatibelität maximal halten.
Plan war es auch das ganze auf Linux laufen zu lassen...
Also werde ich mal beim klassischen Weg mit Handles bleiben.
Danke nochmals :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!