Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Leer datos de DWG Extern y libredwg
#1
Lightbulb 

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
  1. Library "/usr/local/lib/libredwg:0.0.11"
  2.  
  3. 'EXPORT int dwg_read_file (const char *restrict filename, Dwg_Data *restrict dwg);
  4. Private Extern dwg_read_file(filename As String, Dwg_Data As Pointer) As Integer
  5.  
  6. 'EXPORT int dxf_read_file (const char *restrict filename, Dwg_Data *restrict dwg);
  7. Private Extern dxf_read_file(filename As String, Dwg_Data As Pointer) As Integer
  8.  
  9. 'EXPORT unsigned int dwg_get_layer_count (const Dwg_Data *restrict dwg);
  10. Private Extern dwg_get_layer_count(Dwg_Data As Pointer) As Integer
  11.  
  12.   Dim info As Pointer
  13.   i = dwg_read_file(f, info)
  14.   q = dwg_get_layer_count(info)
  15.   Return q



El archivo dwg.h se puede consultar aquí
https://git.savannah.gnu.org/cgit/libred...lude/dwg.h
Saludos.

1 Saludo.
    ¡Gracias!
#2

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)
    ¡Gracias!
#3

(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 Confused 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)
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)