Llamar a las funciones de C ++ en Delphi es bastante directa y llama a las funciones de Delphi en C ++.
Lo que significa que el método de llamada de función predeterminado de Delphi 1 es el método Pascal, Delphi 4, Delphi
El método predeterminado de 5 es el método optimizado de llamadas CDECL, es decir, el método de registro. Estar en c ++
Implementar compartir funciones con programas Delphi, a menos que haya razones suficientes, se debe utilizar el estándar.
El método de llamadas de sistema desnudo, es decir, el método stdcall. Para que el compilador C ++ no marque la función como "mang"
LED ", que hace que el compilador Delphi crea erróneamente que la función usa el método de llamada CDECL, debe estar en C ++
En el código, Extern "C" describe la función compartida, como se muestra en el siguiente ejemplo: Prototipo Descripción: En C ++
En: extern "c" int _stdcall testFunc ();
stdcall; llamar sintaxis: en c ++: int i = testFunc ();
En Delphi: Var I: Integer; ...
comenzar…
i: = testFunc;…
End; los parámetros de la función compartida deben ser el tipo variable admitido por ambos idiomas, que es el correcto.
Prerrequisito para parámetros de paso. Clases variables como la moneda, cadena, set, etc. de Delphi, etc.
Tipo, en C ++, no hay un tipo de variable correspondiente y no se puede utilizar como un parámetro de una función compartida. Poder
Pase los punteros con parámetros de valor utilizando el tipo PCHAR en este momento, el usuario debe prestar atención a los caracteres.
Reciclaje del espacio de cuerdas.
Los parámetros variables en el idioma Delphi deben describirse como formas de referencia de los tipos de variables correspondientes en C ++.
Como sigue: en Delphi: Function testFunc (Var I: Integer): Integer;
En: int testFunc (int e I);
La conexión se puede hacer mediante enlace estático o enlace dinámico.
1. Método de enlace estático si el programa C ++ en sí tiene una pequeña cantidad de código, y no hay necesidad de preocuparse por C
La biblioteca de tiempo de ejecución tendrá un proceso interactivo, y se puede utilizar un método de enlace estático, es decir, Delphi y C ++
El archivo de objeto (*.obj) está vinculado al archivo ejecutable final. El método específico es usar {$ l}
Compilar instrucciones para habilitar el compilador Delphi que lea automáticamente el archivo de destino especificado, como se describe a continuación: función
TestFunc: Integer; stdcall; {$ l testfunc.obj} 2.
Si el código C ++ ya es bastante completo o un subsistema completo, el volumen del código es grande o
Al usar la biblioteca de tiempo de ejecución C, en este caso, se debe utilizar el método de la biblioteca de enlaces dinámicos (DLL). este
Cuando, se debe hacer la siguiente explicación en el código fuente de dos idiomas: en C ++: int Stdcall Export
TestFunc ();
'TestFunc.dll';
Ahora, en términos de compartir métodos de objetos, este intercambio se puede dividir en dos niveles: objeto (objeto)
Compartir clases y compartir clases. Para implementar el intercambio a nivel de objeto, el lenguaje de programación debe tener
Dos requisitos previos: capaz de definir un puntero a un objeto creado por otro idioma;
Métodos en un objeto determinado por un puntero.
Para implementar el intercambio a nivel de clase, también debe considerar: poder crear clases definidas por otro idioma
instancia;
A continuación se describe el método para implementar el intercambio de objetos entre Delphi y Borland C ++.
1. Para compartir objetos Delphi en C ++, para implementar la llamada de los objetos Delphi de C ++, primero debe usar Delphi
La parte de la interfaz de la unidad y el archivo de encabezado C ++ indican la interfaz del objeto que debe compartirse, en el
La interfaz del objeto define qué propiedades y métodos contiene el objeto y explica las partes que se pueden compartir.
La clave para compartir objetos radica en los métodos de intercambio. En el idioma de Delphi, haga un objeto capaz
Para ser compartido, se puede describir como dos partes de la interfaz, llamada temporalmente "interfaz compartida" e "implementación
interfaz ". donde una interfaz compartida indica qué métodos en el objeto pueden compartir por otro idioma;
La interfaz actual hereda la interfaz compartida, y el método en la parte de implementación de la unidad se utiliza para implementar la interfaz.
Definir implementaciones específicas. Para definir un objeto Delphi que C ++ puede compartir, la interfaz compartida
Nota: En el programa Delphi, el método a compartir debe describirse como abstracto (resumen).
Y virtual (virtual);
El método del objeto compartido debe explicarse como "puro virtual" por Delphi.
Debe describirse en ambos idiomas como el mismo método de llamadas, generalmente utilizando llamadas de sistema estándar
forma (stdcall).
A continuación, damos un ejemplo de estas reglas, suponiendo que haya un objeto de Delphi: ttestObject = classprocedure
Proc1 (x: entero); función func1 (x: entero): pchar; procedimiento
Proc2; función func2: integer; final; si los programas de C ++ necesitan compartir su
Los métodos PROC1 y FUNC1 pueden modificarse en el siguiente formulario:
StestObject = classprocedure
Proc1 (x: entero);
stdcall; función func1 (x: entero);
Virtual;
Proc1 (x: entero); fuction func1 (x: entero): pchar;
procedimiento PROC2; función
Func2: Integer; End;
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;};
Para acceder con éxito a las clases definidas por Delphi en C ++, se debe especificar la interfaz Delphi.
Contiene una "función de fábrica" compartible createTeStObject,
La función de fabricación se puede definir en una biblioteca de enlaces dinámico o archivo de objeto (.obj), por ejemplo: biblioteca
TestLib; exporta createTeStObject; function createTeStObject: stestObject;
stdcall;
Fin.
El objeto de la llamada es el siguiente: extern "c" stestobject stdcall
*CreateTeStObject (); Void
UseTestObject (void) {stestObject *thetestObject = createTeStObject ();
*str = thetestObject-> func1 (0);} Al llamar a la función de fabricación createTeStObject
Cuando el lado de Delphi realmente ocupó el espacio de una instancia de objeto, el programa C ++ está en
Después de que se complete todo el procesamiento para este objeto, el espacio debe ser liberado.
Definir una clase en Delphi, como el método compartido libre del Proc1 mencionado anteriormente, para completar esto
Una tarea: stestObject = classprocedure Proc1 (x: entero);
abstracto;
stdcall; procedimiento gratis;
implementación…
procedimiento ttestObject.Free;
fin;…
final.
La interfaz de usuario, por lo que el código Delphi llama al código C ++ parece ser más práctico. En realidad, Delphi
El método de implementación para compartir objetos C ++ es muy similar a los objetos Delphi compartidos de C ++ anteriores. Usa lo mismo
Interfaz compartida e interfaz de implementación Método Descripción Método para definir clases de C ++: clase stestobject
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;}; clase
TtestObject: public stestObject {void proc1 (int x); char *func1 (int
x); Void Proc2 (); int Func2 (); Void Free ();}; e implementa estos métodos
. Del mismo modo, los objetos C ++ requieren una función de fabricación correspondiente.
stdcall export *createTeStObject () {return (steStObject *)
El nuevo código ttestObject.create;} delfi se puede usar para crear una función createTeStObject llamando al createTeStObject,
Es fácil crear una instancia en C ++, obtener el valor del puntero en esa instancia y usar este puntero
Valor para llamar a métodos compartidos en el objeto. Por supuesto, después de completar el procesamiento relevante del objeto,
No olvides llamar libre para liberar el espacio ocupado.