Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Conocer El Tamaño De Una Estructura De Una Librería Externa C
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Conocer El Tamaño De Una Estructura De Una Librería Externa C 
 
A menudo en la gestión de librerías externas, escritas en C, puede ocurrir de deber invocar directamente a través de una adecuada librería ad hoc una Estructura externa. En este caso es absolutamente importante conocer el tamaño (los byte de memoria utilizados) de esta Estructura externa.

Un ejemplo con la Estructura 'snd_seq_real_time_t' del fichero 'header' /usr/include/alsa/seq_event.h:
Library "/tmp/libreria"

Private Extern Dim_snd_seq_real_time_t() As Integer


Public Sub Main()

  crea_so()

End


Private Procedure crea_so()

Dim nS, s, r, t As String

' Ruta del fichero 'header' que contiene la Estructura:
  r = "/usr/include/alsa/seq_event.h"

' Nombre de la Estructura:
  nS = "snd_seq_real_time_t"
  
' Incluye el fichero 'header' que contiene la Estructura:
  t = "#include <" & Replace(r, "/usr/include/", Null) & ">"

  t &= "\n\n\nint Dim_" & nS & "() {\n" &
    "  return sizeof(" & nS & ");\n}"
  
' Muestra el código fuente de la librería .so:
  Print t
  
' Crea el fichero C con el código fuente de la librería .so:
  File.Save("/tmp/libreria.c", t)

' Engendra la librería compartida:
  Shell "gcc -o /tmp/libreria.so /tmp/libreria.c -shared -lasound" Wait

' Invoca la función externa y muestra el tamaño de la Estructura:
  Print "\nTamaño de la Estructura: "; Dim_snd_seq_real_time_t(); " byte"

End

 



 
última edición por vuott el Miercoles, 01 Octobre 2014, 00:49; editado 6 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Conocer El Tamaño De Una Estructura De Una Librería Externa C 
 
Eso sólo es válido si dispones del código fuente en C. ¿Cómo lo harías si no tienes las fuentes del programa en C y sólo tienes la librería .so y la información precisa del interface para usar la librería?

Por lo que sabemos, en C las estructuras son siempre de un tamaño fijo en función del número de elementos y sus tipos; no pueden variar el tamaño ya que necesitamos saberlo antes de reservar memoria para alojarlas.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Conocer El Tamaño De Una Estructura De Una Librería Externa C 
 
jguardon escribió: [Ver mensaje]
Eso sólo es válido si dispones del código fuente en C. ¿Cómo lo harías si no tienes las fuentes del programa en C y sólo tienes la librería .so y la información precisa del interface para usar la librería?

Si tu conoces el API de la librería externa y los relatos archivos header, puedes escribir un programa sin tener otro programa preexistente.


jguardon escribió: [Ver mensaje]
Por lo que sabemos, en C las estructuras son siempre de un tamaño fijo en función del número de elementos y sus tipos; no pueden variar el tamaño ya que necesitamos saberlo antes de reservar memoria para alojarlas.

En mi experiencia puedo decir que no he encontrado siempre correspondencia entre las Estructuras en C muy complejas y su traslado en Gambas.

Saludos
 



 
última edición por vuott el Miercoles, 01 Octobre 2014, 16:39; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Libmodbus: Usando Una Librería Externa razaAztk Controles/Librerías/Componentes 16 Martes, 10 Julio 2018, 15:37 Ver último mensaje
mckaygerhard
No hay nuevos mensajes Conocer Tamaño Del Block Device vuott Aplicaciones/Fragmentos de Código 6 Martes, 08 Marzo 2016, 23:50 Ver último mensaje
vuott
No hay nuevos mensajes Saber Direccion IP Externa Juan Luis Lopez Aplicaciones/Fragmentos de Código 13 Martes, 08 Enero 2019, 14:43 Ver último mensaje
tincho
No hay nuevos mensajes Ejemplo De Estructura Shell General 2 Jueves, 20 Junio 2013, 15:47 Ver último mensaje
jguardon
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario