Das Aufrufen von C ++ -Funktionen in Delphi ist ziemlich direkt und die Aufruf von Delphi -Funktionen in C ++
Was bedeutet, dass die Standard -Funktionsaufrufmethode von Delphi 1 Pascal -Methode, Delphi 4, Delphi ist
Die Standardmethode von 5 ist die optimierte CDECL -Aufrufmethode, dh die Registermethode. In C ++ sein
Implementieren der Funktionsfreigabe mit Delphi -Programmen, es sei denn, es gibt ausreichende Gründe, der Standard sollte verwendet werden.
Die Aufrufmethode mit nacktem System, dh die STDCall-Methode. Damit der C ++ - Compiler die Funktion nicht als "Mang" markiert,
LED ", wodurch der Delphi -Compiler fälschlicherweise der Ansicht ist
Im Code beschreibt Extern "C" die gemeinsame Funktion, wie im folgenden Beispiel gezeigt: Prototyp Beschreibung: in C ++
In: extern "c" int _stdcall testfunc ();
stdcall; aufrufen syntax: in c ++: int i = testfunc ();
In Delphi: var i: Ganzzahl;
beginnen…
i: = testfunc;…
Ende; Die Parameter der gemeinsam genutzten Funktion müssen der variable Typ sein, der von beiden Sprachen unterstützt wird, was die richtige ist.
Voraussetzung für die Übergabe von Parametern. Variablenklassen wie Delphis Währung, String, Set usw.
Typ In C ++ gibt es keinen entsprechenden variablen Typ und kann nicht als Parameter einer gemeinsam genutzten Funktion verwendet werden. Kann
Pass -String -Zeiger mit Wertparametern mit dem PCHR -Typ.
Recycling des Saitenraums.
Die variablen Parameter in der Delphi -Sprache sollten als Referenzformulare der entsprechenden variablen Typen in C ++ beschrieben werden.
Wie folgt: in Delphi: Funktion testfunc (var i: Integer): Integer;
In: int testfunc (int & i);
Die Verbindung kann durch statisches Verknüpfung oder dynamische Verknüpfung erfolgen.
1. statische Verknüpfungsmethode Wenn das C ++ - Programm selbst eine kleine Menge Code hat und sich keine Sorgen um C machen muss
Die Laufzeitbibliothek hat einen interaktiven Prozess, und es kann eine statische Verknüpfungsmethode verwendet werden, dh Delphi und C ++
Die Objektdatei (*.obj) ist in die endgültige ausführbare Datei verknüpft. Die spezifische Methode besteht darin, {$ l} zu verwenden
Kompilieren Sie Anweisungen, mit der der Delphi -Compiler die angegebene Zieldatei automatisch lesen kann, wie unten beschrieben: Funktion
Testfunc: Integer; Stdcall; {$ l testfunc.obj} 2.
Wenn C ++ - Code bereits ziemlich umfassend oder ein vollständiges Subsystem ist, ist das Codevolumen groß oder
Bei Verwendung der C -Laufzeitbibliothek sollte in diesem Fall die Methode Dynamic Link Library (DLL) verwendet werden. Das
Wann sollte die folgende Erklärung im Quellcode von zwei Sprachen abgegeben werden: in C ++: Int Stdcall Export
Testfunc ();
'Testfunc.dll';
In Bezug auf die Freigabe von Objektmethoden kann diese Freigabe in zwei Ebenen unterteilt werden: Objekt (Objekt)
Klassenfreigabe und Klassenfreigabe. Um die Freigabe von Objektebene zu implementieren, muss die Programmiersprache haben
Zwei Voraussetzungen: In der Lage, einen Zeiger auf ein von einer anderer Sprache erstellter Objekt zu definieren
Methoden in einem von einem Zeiger bestimmten Objekt.
Um die Freigabe auf Klassenebene zu implementieren, müssen Sie auch berücksichtigen: Sie in der Lage sind, Klassen zu erstellen, die von einer anderen Sprache definiert werden können
Instanz;
Im Folgenden wird die Methode zur Implementierung der Objektfreigabe zwischen Delphi und Borland C ++ beschrieben.
1. Um Delphi -Objekte in C ++ zu teilen, um den Anruf von Delphi -Objekten aus C ++ zu implementieren, müssen Sie zuerst Delphi verwenden
Der Schnittstellenteil des Geräts und die C ++ - Header -Datei geben die Schnittstelle des Objekts an, das in der gemeinsam genutzt werden muss
Die Objektschnittstelle definiert, welche Eigenschaften und Methoden das Objekt enthält, und erklärt die Teile, die gemeinsam genutzt werden können.
Der Schlüssel zum Austausch von Objekten liegt in der Freigabemethoden. Machen Sie in Delphi Sprache ein Objekt fähig
Um gemeinsam genutzt zu werden, kann es als zwei Schnittstellenteile beschrieben werden, die vorübergehend als "Shared Interface" und "Implementierung bezeichnet werden
Schnittstelle ". wobei eine gemeinsame Schnittstelle angibt, welche Methoden im Objekt von einer anderen Sprache geteilt werden können;
Die aktuelle Schnittstelle erbt die gemeinsam genutzte Schnittstelle, und die Methode im Implementierungsteil des Geräts wird zur Implementierung der Schnittstelle verwendet.
Spezifische Implementierungen definieren. Um ein Delphi -Objekt zu definieren, das von C ++ geteilt werden kann, der gemeinsam genutzten Schnittstelle
Hinweis: Im Delphi -Programm muss die zu gemeinsame Methode als Abstract (Abstract) beschrieben werden.
Und virtuell (virtuell);
Die gemeinsam genutzte Objektmethode muss von Delphi als "reine virtuelle" erklärt werden.
Es muss in beiden Sprachen als dieselbe Aufrufmethode beschrieben werden, in der normalerweise Standard -Systemaufrufe
Weg (stdcall).
Lassen Sie uns im Folgenden ein Beispiel für diese Regeln geben, vorausgesetzt, es gibt ein solches Delphi
Proc1 (x: Integer); Funktion func1 (x: Integer): PChar; Prozedur
Proc2; Funktion func2: Ganzzahl; Ende; wenn C ++ -Programme ihre teilen müssen
Methoden Proc1 und Func1 können in das folgende Formular geändert werden:
StestObject = classProcedure
Proc1 (X: Integer);
stdcall; Funktion func1 (x: Integer);
virtuell;
Proc1 (x: Ganzzahl); Fuktionsfunktion (x: Integer): pchar;
Verfahren proc2; Funktion
Func2: Integer; Ende;
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;};
Um erfolgreich auf Delphi-definierte Klassen in C ++ zuzugreifen, muss die Delphi-Schnittstelle angegeben werden.
Enthält eine gemeinsam nutzbare "Fabrikfunktion" CreateTestObject,
Die Fertigungsfunktion kann in einer dynamischen Linkbibliothek oder Objektdatei (.OBJ) definiert werden: Bibliothek
Testlib; exportiert CreateTestObject; Funktion createTestObject: stestObject;
stdcall;
Ende. Nach einer solchen Verarbeitung kann dies jetzt in C ++ - Programmen von Delphi verwendet werden
Das Objekt des Aufrufs ist wie folgt: extern "C" stestObject stdcall
*CreateTestObject (); void
UsetestObject (void) {stestObject *thetestObject = CreateTestObject ();
*str = thetestObject-> func1 (0);} Beim Aufrufen der Fertigungsfunktion CreateTestObject
Wenn die Delphi -Seite tatsächlich den Raum einer Objektinstanz besetzte, befindet sich das C ++ - Programm in
Nach Abschluss der Verarbeitung dieses Objekts muss der Speicherplatz befreit werden.
Definieren Sie eine Klasse in Delphi, z.
Eine Aufgabe: stestObject = classProcedure proc1 (x: Integer);
Zusammenfassung;
stdcall; prozedurfrei;
Durchführung…
procedure tTestObject.free;
Ende;…
End.2.Delphi Share C ++ - Objekte Normalerweise erwägen Programmierer die Verwendung von Delphi zum Kompilieren.
Die Benutzeroberfläche, so dass der Delphi -Code C ++ Code aufruft, scheint praktischer zu sein. Eigentlich Delphi
Die Implementierungsmethode zur Freigabe von C ++ - Objekten ist den oben genannten C ++ - Shared Delphi -Objekten sehr ähnlich. Verwenden Sie dasselbe
Shared Interface und Implementierungsschnittstelle Beschreibung Methode zum Definieren von C ++ - Klassen: Class StestObject
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;}; Klasse
TTestObject: public stestObject {void proc1 (int x); char *func1 (int
x); void proc2 (); int func2 (); void Free ();};
. In ähnlicher Weise erfordern C ++ - Objekte eine entsprechende Fertigungsfunktion.
STDCall Export *createTestObject () {return (stestObject *)
Neue tTestObject.create;} Delphi -Code kann verwendet werden, um eine Funktion createTestObject zu erstellen, indem das createTestObject aufgerufen wird.
Es ist einfach, eine Instanz in C ++ zu erstellen, den Zeigerwert auf diese Instanz zu erhalten und diesen Zeiger zu verwenden
Wert, um gemeinsam genutzte Methoden im Objekt aufzurufen. Natürlich nach Abschluss der relevanten Verarbeitung des Objekts,
Vergessen Sie nicht, sich frei anzurufen, um den belegten Raum zu befreien.