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;
|