Ver Mensaje Individual
  #10  
Antiguo 02-04-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Reputación: 20
Guillermo80 Va por buen camino
me he perdido

Hola Al, lo siento pero creo que no te he entendido lo último que me decías:

Cita:
...habrás de crear, efectivamente, un procedimiento con el nombre que quieras (mientras no tenga conflicto con otros identificadores, claro está), siendo ese procedimiento de cabecera equivalente al tipo de dato FLAC__StreamEncoderProgressCallback que ya declaraste
Si ahora resulta que a Init_File le voy a pasar @MiFuncion:

1. ¿Cómo se relaciona con el tipo que me he creado FLAC__StreamEncoderProgressCallback? Quiero decir, que ahora tendría un tipo FLAC__StreamEncoderProgressCallback, una función @Mifunción, y sólo un parámetro para pasarle a Init_File.
2. Si utilizo como me dices como parámetro para init_File @MiFuncion, eso falla en compilación, porque le estaría pasando una direccion de memoria en vez de una variable declarada del tipo precisado. ¿Qué es lo que falla?

Aparte de todo lo anterior te explico un poco el contexto:

- El programa general consiste en comprimir audio sin pérdidas siguiendo las especificaciones del formato de audio FLAC.
- Para ello uso las funciones de libFlac.dll
- El programa en realidad "no me lo invento", en un principio se trata de hacer algo simple, para ello tomo un ejemplo de VisualC++ que comprime una pista de audio.
- La función de retrollamada es opcional, y si la cosa se pone fea, pues le paso un nil y se acabó.
- El punto del programa en el que se hace la retrollamada es el siguiente:

Cita:
init_status = FLAC__stream_encoder_init_file(encoder, argv[2], progress_callback, NULL);
Pongo textualmente la descripción del sistema que nos ocupa:

Cita:
* For encoding directly to a file, use FLAC__stream_encoder_init_FILE()
* or FLAC__stream_encoder_init_file(). Then you must only supply a
* filename or open \c FILE*; the encoder will handle all the callbacks
* internally. You may also supply a progress callback for periodic
* notification of the encoding progress.Initialize the encoder instance to * * encode native FLAC files.
...
...
* \param encoder An uninitialized encoder instance.
* \param file An open file. The file should have been opened
* with mode \c "w+b" and rewound. The file
* becomes owned by the encoder and should not be
* manipulated by the client while encoding.
* Unless \a file is \c stdout, it will be closed
* when FLAC__stream_encoder_finish() is called.
* Note however that a proper SEEKTABLE cannot be
* created when encoding to \c stdout since it is
* not seekable.
* \param progress_callback See FLAC__StreamEncoderProgressCallback. This
* pointer may be \c NULL if the callback is not
* desired.
* \param client_data This value will be supplied to callbacks in their
* \a client_data argument.
De aquí hay una cosa que no entiendo exactamente, cuando dice:

Cita:
...The file should have been opened with mode \c "w+b" and rewound.
¿En Delphi a qué equivaldría? Yo el fichero lo abro en modo lectura, aunque ahora dudo si debería estar en lectura/escritura por si codifica en el mismo fichero y no en otro...

Espero haber provisto de información suficiente mi trabajo.

Un saludo.

Guillermo.
Responder Con Cita