Integración C en Delphi
Hola alguien tiene idea de si esto se puede hacer y como?? Es decir, ¿desde una aplicación Delphi se pueden utilizar funcionalidades implementadas en C? Muchas gracias.
|
Podrías utilizar DLL's ¿Te serviría eso?
|
Pues tendría que investigarlo. Te refieres a meter las funcionalidades implementadas en C en una libreria DLL y cargar dicha librería desde mi aplicación Delphi???
Suena interesante, pero tendré que documentarme bastante a cerca de la creación de DLL's y de la posterior integración de una DLL en una aplicación Delphi. Alguna sugerencia??? |
No lo he hecho nunca (que conste), pero en teoría no debe tener problemas.
Aquí hay expertos en C, a ver si nos dan su opinión. ¡O mejor! a ver si alguno nos crea una DLL con una funcioncilla sencilla (sumar(a,b:Integer), por ejemplo) e intentamos llamarla desde Delphi. |
Un ejemplo suma:
La función en la dll escrita en C: Código:
extern "C" __declspec(dllexport) Ahora el código Delphi:
Esto vale para variables enteras, float o similares. Pero no para cadenas, ya que hay que mandarlas como Pchar, que es el formato que usa C. Los arrays o estructuras de datos se pueden enviar como punteros. |
1 Archivos Adjunto(s)
Es la primera vez que pruebo a hacer una dll en C. Espero que este bien :o
El código de la primera dll (suma.c) es el siguiente: Código:
__declspec(dllexport) int __stdcall Suma(int a, int b) Código:
g + + -c suma.c Código:
LIBRARY suma.dll
|
Y funciona perfectamete, como era de esperar...:D:D:D
|
Creo recordar que con Delphi se podían enlazar directamente al ejecutable archivos obj de C. Vendría siendo muy similar al uso de la dll pero todo en el mismo ejecutable.
Aquí hay una referencia para delphi 5. Sin embargo parece que si tales obj utlizan otras dlls la cuestión se complica, o al menos eso parece, por lo que dice Rudy Velthuis acá. En fin, sólo quería comentarlo por si fuera una opción. // Saludos |
Siento no haber podido responder antes. Muchas gracias por las sugerencias, aunque tengo problemas con ellas. Apoyandome en las explicaciones de seoane y basti he conseguido crear suma.dll, pero (gracias a mi inexperiencia con Delphi) no soy capaz de llamarla desde un pequeño programita. Os adjunto el .pas
El compilador me dice que Suma no está declarado, por lo que asumo que no está cogiendo la dll, ¿me equivoco? |
Cita:
Por cierto, no entiendo para que usas esto: Basti te lo ponía como un ejemplo, pero no hace falta que lo incluyas en tu programa |
Cita:
yo pensaba que se estaba llamando a la funcion implementada en C, pero por lo que veo, con la declaración se supone que ya queda implícito, es decir, la función Suma2 ¿no necesita implementación? puesto que está implementada en suma.dll, ¿no? |
Exactamente :) , al declararla le estamos diciendo al compilador como es, donde esta, y con que nombre queremos llamarla, pero nada mas, la implementación ya esta dentro de la dll.
|
Ok, perfecto (ya me funciona). Muchas gracias. Lo había entendido mal.
|
La franja horaria es GMT +2. Ahora son las 19:12:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi