Mensajes: 1,260
Temas: 183
Gracias Recibidas: 269 en 207 posts
Gracias Dadas: 200
Registro en: Jul 2020
01-11-2020, 04:04
Hola a todos.
Hice una prueba muy rudimentaria con Extern pero no ha funcionado, dejo el código aquí por si alguien tiene ganas de resolverlo.
GAMBAS
Library "/usr/local/lib/libredwg:0.0.11"
'EXPORT int dwg_read_file (const char *restrict filename, Dwg_Data *restrict dwg);
'EXPORT int dxf_read_file (const char *restrict filename, Dwg_Data *restrict dwg);
'EXPORT unsigned int dwg_get_layer_count (const Dwg_Data *restrict dwg);
i = dwg_read_file(f, info)
q = dwg_get_layer_count(info)
El archivo dwg.h se puede consultar aquí
https://git.savannah.gnu.org/cgit/libred...lude/dwg.h
Saludos.
1 Saludo.
Mensajes: 320
Temas: 26
Gracias Recibidas: 70 en 57 posts
Gracias Dadas: 10
Registro en: Jul 2020
02-11-2020, 23:47
(Última modificación: 04-11-2020, 03:06 por
vuott.)
De hecho, el parámetro formal "Dwg_data *restrict dwg " es un puntero a la estructura declarada en el archivo "dwg. h".
Es una estructura muy compleja, y por esta su complejidad es conveniente que Gambas pase a la función externa una variable de tipo Puntero que apunte a un área de memoria reservada, con un tamaño igual al ocupado por la estructura "Dwg_data".
Para conocer el tamaño (es decir, la cantidad de bytes de memoria ocupados por esa estructura) tienes que utilizar en un programa, escrito en C, el operador "sizeof()".
De hecho, en este caso, no puedes dar a la función externa "dwg_read_file()" una simple variable de tipo Puntero; en cambio tienes que darle una variable de tipo Puntero que apunte a un área de memoria "reservada".
Conocida la cantidad de memoria ocupada por la Estructura "Dwg_data", en Gambas puedes asignar una cantidad igual de memoria con la función "Alloc()".
La función "Alloc()" devolverá una variable de tipo Puntero que tendrás pasar al segundo argumento de la función externa "dwg_read_file()".
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Mensajes: 320
Temas: 26
Gracias Recibidas: 70 en 57 posts
Gracias Dadas: 10
Registro en: Jul 2020
04-11-2020, 03:02
(Última modificación: 04-11-2020, 03:02 por
vuott.)
(01-11-2020, 04:04)tincho escribió:
1) Yo no llamaría la función interna de Gambas - es decir: info( ) - con el mismo nombre que la variable de tipo Puntero, declarada en su cuerpo.
2) En el prototipo de la función "info()" está previsto que devuelva un Puntero, pero la variable "q", efectivamente retornada (
Return q), es de tipo

Entero !
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)