L'appel C ++ dans Delphi est assez direct et les fonctions de Delphi dans C ++.
Ce qui signifie que la méthode d'appel de fonction par défaut de Delphi 1 est la méthode Pascal, Delphi 4, Delphi
La méthode par défaut de 5 est la méthode d'appel CDECL optimisé, c'est-à-dire la méthode de registre. Être en C ++
Implémentez le partage de fonction avec les programmes Delphi, à moins qu'il n'y ait des raisons suffisantes, la norme doit être utilisée.
La méthode d'appel du système nu, c'est-à-dire la méthode stdcall. Pour que le compilateur C ++ ne marque pas la fonction comme "mang"
LED ", provoquant à tort le compilateur de Delphi à croire à tort que la fonction utilise la méthode d'appel CDECL, elle devrait être en C ++
Dans le code, l'extern "C" décrit la fonction partagée, comme indiqué dans l'exemple suivant: Description du prototype: En C ++
Dans: extern "c" int _stdcall testfunc ();
stdcall; syntaxe d'appel: en c ++: int i = testFunc ();
Dans Delphi: var I: entier;…
commencer…
i: = testfunc;…
fin; les paramètres de la fonction partagée doivent être le type variable pris en charge par les deux langues, ce qui est le bon.
Préalable pour le passage des paramètres. Classes variables telles que la monnaie, la chaîne, le set de Delphi, etc.
Type, en C ++, il n'y a pas de type variable correspondant et ne peut pas être utilisé comme paramètre d'une fonction partagée. Peut
Passer des pointeurs de chaîne avec des paramètres de valeur en utilisant le type PCHA.
Recyclage de l'espace de cordes.
Les paramètres variables de la langue Delphi doivent être décrits comme des formes de référence des types de variables correspondants en C ++.
Comme suit: dans Delphi: fonction testfunc (var i: entier): entier;
Dans: int testfunc (int & i);
La connexion peut être effectuée par liaison statique ou liaison dynamique.
1. Méthode de liaison statique Si le programme C ++ lui-même a une petite quantité de code, et il n'est pas nécessaire de s'inquiéter de C
La bibliothèque d'exécution aura un processus interactif et la méthode de liaison statique peut être utilisée, c'est-à-dire Delphi et C ++
Le fichier objet (* .obj) est lié dans le fichier exécutable final. La méthode spécifique consiste à utiliser {$ l}
Compiler des instructions pour permettre au compilateur Delphi de lire automatiquement le fichier cible spécifié, comme décrit ci-dessous: Fonction
TestFunc: entier; stdcall; {$ l testfunc.obj} 2.
Si le code C ++ est déjà assez complet ou un sous-système complet, le volume de code est grand ou
Lors de l'utilisation de la bibliothèque Runtime C, dans ce cas, la méthode Dynamic Link Library (DLL) doit être utilisée. ce
Quand, l'explication suivante doit être faite dans le code source de deux langues: en C ++: Int Stdcall Exportation
TestFunc ();
'Testfunc.dll'; l'objet partageant l'objet est partagé entre C ++ et Delphi.
Maintenant, en termes de partage de méthodes d'objet, ce partage peut être divisé en deux niveaux: objet (objet)
Partage de classe et partage de classe. Pour implémenter le partage au niveau des objets, le langage de programmation doit avoir
Deux conditions préalables: capable de définir un pointeur sur un objet créé par une autre langue;
Méthodes dans un objet déterminé par un pointeur.
Pour implémenter le partage au niveau des classes, vous devez également considérer: être capable de créer des classes définies par une autre langue
Instance; l'espace occupé par une instance peut être libéré du tas;
Ce qui suit décrit la méthode d'implémentation du partage d'objets entre Delphi et Borland C ++.
1. Pour partager des objets Delphi en C ++, pour implémenter l'appel des objets Delphi à partir de C ++, vous devez d'abord utiliser Delphi
La partie d'interface de l'unité et le fichier d'en-tête C ++ indiquent l'interface de l'objet qui doit être partagé, dans le
L'interface d'objet définit les propriétés et méthodes que contient l'objet et explique les parties qui peuvent être partagées.
La clé du partage des objets réside dans les méthodes de partage. Dans la langue delphi, rendre un objet capable
Pour être partagé, il peut être décrit comme deux parties d'interface, temporairement appelées "interface partagée" et "implémentation
Interface ". Lorsqu'une interface partagée indique quelles méthodes dans l'objet peuvent être partagées par une autre langue;
L'interface actuelle hérite de l'interface partagée et la méthode de la partie d'implémentation de l'unité est utilisée pour implémenter l'interface.
Définir des implémentations spécifiques. Pour définir un objet Delphi qui peut être partagé par C ++, l'interface partagée
Remarque: Dans le programme Delphi, la méthode à partager doit être décrite comme abstraite (abstraite).
Et virtuel (virtuel); dans les programmes C ++, les mots clés "virtuel" et "= 0" doivent être utilisés.
La méthode d'objet partagé doit être expliquée comme "virtuelle pure" par Delphi.
Il doit être décrit dans les deux langues comme la même méthode d'appel, utilisant généralement des appels système standard
Way (stdcall).
Ci-dessous, donnons un exemple de ces règles, en supposant qu'il existe un tel objet Delphi: ttestObject = classProcedure
Proc1 (x: entier); fonction func1 (x: entier): PCHER; procédure
Proc2; fonction func2: entier; fin; si les programmes C ++ doivent partager leur
Méthodes Proc1 et Func1 peuvent être modifiées dans le formulaire suivant:
Stestobject = classprocedure
Proc1 (x: entier);
stdcall; fonction func1 (x: entier);
Virtual; Résumé;
Proc1 (x: entier); FUCTION Func1 (x: entier): phar;
procédure proc2; fonction
Func2: entier; fin;
{virtual void proc1 (int x) = 0; char * char * func1 (int x) = 0;};
Afin d'accéder avec succès à des classes définies par Delphi en C ++, l'interface Delphi doit être spécifiée.
Contient une "fonction d'usine" partageable "CreateTestObject,
La fonction de fabrication peut être définie dans une bibliothèque de liens dynamiques ou un fichier d'objet (.obj), par exemple: bibliothèque
TestLib; exportation CreateTestObject; fonction CreateTestObject: stestObject;
stdcall;
fin.
L'objet de l'appel est le suivant: Extern "C" stestobject stdcall
* CreateTestObject (); void
UseTestObject (void) {stestObject * theTOstObject = CreateTestObject ();
* str = thetestobject-> func1 (0);} lors de l'appel de la fonction de fabrication CreateTestObject
Lorsque le côté Delphi a réellement occupé l'espace d'une instance d'objet, le programme C ++ est en
Une fois le traitement de cet objet terminé, l'espace doit être libéré.
Définissez une classe à Delphi, comme la méthode partagée libre du proc1 mentionné ci-dessus, pour terminer ce
Une tâche: stestObject = classProcedure proc1 (x: entier);
Résumé; STDCALL; fonction Func1 (X: entier);
STDCALL; procédure libre;
mise en œuvre…
procédure ttestObject.
fin;…
end.2.Delphi Partage des objets C ++ Habituellement, les programmeurs envisagent d'utiliser Delphi pour compiler.
L'interface utilisateur, donc le code Delphi appelle le code C ++ semble être plus pratique. En fait, Delphi
La méthode d'implémentation pour partager les objets C ++ est très similaire aux objets Delphi partagés C ++ ci-dessus. Utilisez la même chose
Interface partagée et interface d'implémentation Description Méthode pour définir les classes C ++: Classe StestObject
{virtual void proc1 (int x) = 0; char * char * func1 (int x) = 0;}; classe
TtestObject: public stestobject {void proc1 (int x); char * func1 (int
x); void proc2 (); int func2 (); void free ();};
. De même, les objets C ++ nécessitent une fonction de fabrication correspondante.
stdcall export * createTestObject () {return (stestObject *)
Nouveau ttestObject.create;} Le code Delphi peut être utilisé pour créer une fonction CreateTestObject en appelant le CreateTestObject,
Il est facile de créer une instance en C ++, d'obtenir la valeur du pointeur sur cette instance et d'utiliser ce pointeur
Valeur pour appeler des méthodes partagées dans l'objet. Bien sûr, après avoir terminé le traitement pertinent de l'objet,
N'oubliez pas d'appeler gratuitement pour libérer l'espace occupé.