Cita:
Empezado por jocaro
De todos modos os rogaría un ejemplo de los dos primeros pasos; insertar y compilar la unidad de código C en el entorno Delphi y un ejemplo genérico de acceso a una función del código C desde un método en Delphi.
|
Lo intentaré, pero aviso que lo hago de memoria y sin probarlo, ¿eh? Posiblemente necesite algún ajuste.
Primero, el código C podría ser algo así:
Código:
/* Ejemplo para llamar desde Delphi. */
int calcula_cuadrado (int numero)
{
return numero * numero;
}
Ahora, la unidad "envolvente":
Código Delphi
[-]
UNIT UnidadEnvolventeC
{$link 'ejemplo.obj'}
INTERFACE
FUNCTION calcula_cuadrado (Numero: INTEGER): INTEGER; CDECL;
EXTERNAL;
IMPLEMENTATION
END.
Y ahora el uso:
Código Delphi
[-]
PROGRAM Ejemplo
{$mode console}
USES
UnidadEnvolventeC;
VAR
V1, V2: INTEGER;
BEGIN
V1 := 20;
V2 := calcula_cuadrado (V1);
END.
Ten cuidado con los tipos de dato de los parámetros y los valores que devuelve. Por ahí hay tablas que muestran la correspondencia entre los diferentes tipos, pero no te guíes por las apariencias porque a veces el tipo "int" de C no se corresponde con el tipo "INTEGER" de Pascal sino con "SMALLINT" ó con "LONGINT".
También ten en cuenta que el mapa de memoria no es idéntico en C y en Delphi, de ahí que se use "CDECL" en el código Pascal. La mayor parte de compiladores de C tienen una directiva que permite hacer lo opuesto (es decir, que la parte escrita en C use un mapa de memoria similar al de Pascal), pero no suele usarse mucho.
Y otra cosa:
no uses C++, aparte de porque es un lenguaje horrible con todo lo malo de C y poco bueno añadido, porque el mapa de memoria de C++ es tan diferente del de Delphi que es casi imposible compartir datos. Hazlo todo en C.