Ver Mensaje Individual
  #3  
Antiguo 12-03-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Reputación: 20
Guillermo80 Va por buen camino
No del todo

Bueno, realmente no estoy traduciendo toda la dll, sino solo aquellas cabeceras que vaya a utilizar en mi programa de Delphi las traduzco en una unidad .pas. Lo que pasa es que si traduzco una función que lleva una parámetro de entrada que sea FLAC__StreamEncoder, entonces me veo obligado a declarar ese registro, que a su vez tiene dos campos que son los registros FLAC__StreamEncoderProtected y FLAC__StreamEncoderPrivate, que a su vez me obliga a declarar sus contenidos. El tema de traducir todo esto es que esté más "accesible" a la hora de hacer las llamadas desde mi programa principal en Delphi que use esa dll (libFlac.dll).

Tengo una teoría: ¿podría ser que la declaración adelantada:

Cita:
struct FLAC__StreamEncoderProtected;
struct FLAC__StreamEncoderPrivate;
...me evite el tener que declarar en mi unidad .pas esos contenidos, y que se definan al hacer en una función de inicialización la instrucción (en un .c):

Cita:
FLAC__StreamEncoder encoder; //contiene los registros arriba mencionados sin definir
encoder->private_ = (FLAC__StreamEncoderPrivate*)calloc(1, sizeof(FLAC__StreamEncoderPrivate));
...teniendo en cuenta que esta llamada se hace desde el .c en el que está definida correctamente FLAC__StreamEncoderPrivate? calloc reserva el espacio necesario para el FLAC__StreamEncoderPrivate definido en ese mismo .c, y lo asignaría a encoder->private que es el que está sin definir y que tras esa asignación hecha por calloc quedaría declarado y definido correctamente ?

No sé si es una chaladura esto que propongo, pero tiene bastante sentido, además, creo que fuiste tú, Escafandra, quien me habló del uso de la "declaración adelantada" en declaraciones de struct del tipo

Cita:
struct FLAC__StreamEncoderPrivate;
Responder Con Cita