![]() |
Sustituir acceso DLL por unit en código C
Hola
En mi aplicación Delphi, estoy utilizando la base de datos sqlite v.3, a la que se accede a través de una DLL (sqlite3.dll). Me gustaría acceder a través de su código fuente en C (sqlite3.c). He estado buscando información de como hacerlo pero no consigo tenerlo claro. Agradecería que alguien pudiera ayudarme, en concreto en lo siguiente:
|
Lo que pides son "palabras mayores", tendrás que investigar el código de ese programa y cuando lo resuelvas, si te parece bien, explicas aquí cómo lo has hecho :)
|
No sé si venga mucho al caso, pero recuerdo que algo parecido hace midas. Normalmente tienes que incluir la biblioteca midas.dll pero si incluyes la unidas midaslib en el proyecto entonces no hace falta distribuir la biblioteca.
// Saludos |
Usar módulos C en Delphi no es difícil, sin embargo lo que tú quieres hacer sí lo es. El problema lo veo aquí:
Cita:
Yo he intentado extender esas clases para diseñar mi propio sistema de base de datos y no lo he conseguido. |
Pero aún extendiendo la clase TDataSet, ¿cómo le harías?
Otro caso curioso es el de los componentes MyDac de DevArt. El componente TMyConnection tiene una propiedad Options.Direct. Si la pones en false, el ejecutable final requiere que la biblioteca libmysql.dll esté presente. Basta poner la opción en true para que el ejecutable sea independiente. // Saludos |
Cita:
|
Hola.
Roman, Nuño, ante todo, muchas, muchisimas gracias por vuestra ayuda. Me confirmáis mi sospecha de que lo mas problemático es decirle al componente que trabaje con el código, salvo que en dicho componente ya esté prevista una propiedad para ese fin. 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. A ver si con esa información reduzco el problema para dedicarme sólo a revisar los componentes que uso (UniDac que, como MyDac, es de Devart) y revisar sus propiedades para ver si en alguna puedo "convencer" al componente de que se olvide de la DLL. Un saludo y de nuevo gracias. |
No se si las últimas versioned lo hacen, creo que no, pero las que yo conozco no compilan C. Así que lo tendrás que traducir a delphi.
Nunca entendí porqué a Builder C++ se le otorgó la capacidad de compilar archivos.pas y delphi no compila cpp... Saludos. |
Cita:
Primero, el código C podría ser algo así: Código:
/* Ejemplo para llamar desde Delphi. */
Y ahora el uso:
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. |
Hola
Gracias por la ayuda y las recomendaciones. Voy a verlas con detenimiento e intentar aplicarlas en mi programa Un saludo |
| La franja horaria es GMT +2. Ahora son las 06:34:02. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi