Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Enumerado (https://www.clubdelphi.com/foros/showthread.php?t=54089)

Guillermo80 08-03-2008 19:00:18

Enumerado
 
Hola, mi duda es facilita, sólo quiero saber cómo poner el siguiente header de c++ en delphi:

Cita:

const char * const FLAC__StreamEncoderStateString[]
Por si sirve de ayuda la implementación de esta función sería como sigue:

Cita:

FLAC_API const char * const FLAC__StreamEncoderStateString[] = {
"FLAC__STREAM_ENCODER_OK",
"FLAC__STREAM_ENCODER_UNINITIALIZED",
"FLAC__STREAM_ENCODER_OGG_ERROR",
"FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR",
"FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA",
"FLAC__STREAM_ENCODER_CLIENT_ERROR",
"FLAC__STREAM_ENCODER_IO_ERROR",
"FLAC__STREAM_ENCODER_FRAMING_ERROR",
"FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR"
};
No entiendo muy bien que lo que devuelva sea char*, yo entiendo que debería ser un string con el valor "traducido" del enumerado que se le pasa por entrada para que sea imprimible por pantalla, ¿cómo lo veis?

Guillermo80 08-03-2008 19:07:45

Matizo, no es una función, sino un array de strings constantes que haría las veces de la correspondencia con los nombres definidos para el enumerado, no?

Lepe 09-03-2008 12:08:39

sasto

saludos

ixMike 09-03-2008 14:22:44

Hola.

Digo yo que lo de char* es porque es un puntero, ¿no?

Creo que en Delphi quedaría así:

Código Delphi [-]
const
  FLAC__StreamEncoderStateString: array[0..8] of PChar =
    ('FLAC__STREAM_ENCODER_OK',
    'FLAC__STREAM_ENCODER_UNINITIALIZED',
    'FLAC__STREAM_ENCODER_OGG_ERROR',
    'FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR',
    'FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA',
    'FLAC__STREAM_ENCODER_CLIENT_ERROR',
    'FLAC__STREAM_ENCODER_IO_ERROR',
    'FLAC__STREAM_ENCODER_FRAMING_ERROR',
    'FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR');

Salu2 :)

Guillermo80 09-03-2008 17:49:31

Mi version
 
Cuando asignas el tamaño del array creo que lo que hay que poner es el tamaño máximo que van a ocupar las cadenas, yo digo que sería así:
Cita:

type

FLAC__StreamEncoderState = (FLAC__STREAM_ENCODER_OK,
FLAC__STREAM_ENCODER_UNINITIALIZED,
FLAC__STREAM_ENCODER_OGG_ERROR,
FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
FLAC__STREAM_ENCODER_CLIENT_ERROR,
FLAC__STREAM_ENCODER_IO_ERROR,
FLAC__STREAM_ENCODER_FRAMING_ERROR,
FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
);
Cita:

const

FLAC__StreamEncoderStateString : Array FLAC__StreamEncoderState of String[50] =
('FLAC__STREAM_ENCODER_OK',
'FLAC__STREAM_ENCODER_UNINITIALIZED',
'FLAC__STREAM_ENCODER_OGG_ERROR',
'FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR',
'FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA',
'FLAC__STREAM_ENCODER_CLIENT_ERROR',
'FLAC__STREAM_ENCODER_IO_ERROR',
'FLAC__STREAM_ENCODER_FRAMING_ERROR',
'FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR'
);
Por lo menos en el ejemplo que vi en el libro de Delphi4 la reserva hacía alusión al tamaño de la cadena de mayor longitud, en este caso sería

'FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA'

La única duda que me queda es que si debería cambiar la declaración de:

Cita:

FLAC__StreamEncoderStateString : Array FLAC__StreamEncoderState of String[50]
Por esta otra, siguiendo tu propuesta, ixMike:

Cita:

FLAC__StreamEncoderStateString : Array FLAC__StreamEncoderState of PChar[50]
¿Cómo lo ves?

ixMike 09-03-2008 17:54:38

No puedes hacer PChar[50], al menos que yo sepa. En todo caso, sería PChar a secas.

Y perdón por el despiste, la verdad es que no ando muy bien en C :o

Aunque, por otra parte, yo habría hecho esto:

Código Delphi [-]
const
    FLAC__STREAM_ENCODER_OK = 0;
    FLAC__STREAM_ENCODER_UNINITIALIZED = 1;
    FLAC__STREAM_ENCODER_OGG_ERROR = 2;
    FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR = 3;
    FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA = 4;
    FLAC__STREAM_ENCODER_CLIENT_ERROR = 5;
    FLAC__STREAM_ENCODER_IO_ERROR = 6;
    FLAC__STREAM_ENCODER_FRAMING_ERROR = 7;
    FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR = 8;

  FLAC__StreamEncoderStateString: array[0..8] of PChar =
    ('FLAC__STREAM_ENCODER_OK',
    'FLAC__STREAM_ENCODER_UNINITIALIZED',
    'FLAC__STREAM_ENCODER_OGG_ERROR',
    'FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR',
    'FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA',
    'FLAC__STREAM_ENCODER_CLIENT_ERROR',
    'FLAC__STREAM_ENCODER_IO_ERROR',
    'FLAC__STREAM_ENCODER_FRAMING_ERROR',
    'FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR');


Pero vamos, esto ya es cuestión de gustos ;)

Salu2 :)

Guillermo80 09-03-2008 17:54:39

Ooooops¡¡
 
Ay, que me he colao en la declaración, el tamaño efectivamente se declara a la derecha de ...array[MAX]... y no como lo he puesto yo, lo demás lo mantengo, y la pregunta es si debería cambiar mi sentencia de declararlo con String a ponerlo con PChar como sigue:

Cita:

FLAC__StreamEncoderStateString : Array[50] FLAC__StreamEncoderState of PChar=..........
....
....
....

Guillermo80 09-03-2008 17:58:17

Si, buena puntualización la de iniciar en const, pero lo del tamaño estás conmigo en que sería array[0..50] ? ¿O tienes la certeza de que el tamaño solo hace alusión al nº de elementos elegibles?

Guillermo80 09-03-2008 18:06:57

Estoy espesote hoy
 
Es cierto es cierto como dices, finalmente yo dejaría la siguiente declaración:

Código Delphi [-]type FLAC__StreamEncoderState = (FLAC__STREAM_ENCODER_OK, FLAC__STREAM_ENCODER_UNINITIALIZED, FLAC__STREAM_ENCODER_OGG_ERROR, FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR, FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA, FLAC__STREAM_ENCODER_CLIENT_ERROR, FLAC__STREAM_ENCODER_IO_ERROR, FLAC__STREAM_ENCODER_FRAMING_ERROR, FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR);


Código Delphi [-]const FLAC__StreamEncoderStateString : Array[FLAC__StreamEncoderState] of PChar =
('FLAC__STREAM_ENCODER_OK',
'FLAC__STREAM_ENCODER_UNINITIALIZED',
'FLAC__STREAM_ENCODER_OGG_ERROR',
'FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR',
'FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA',
'FLAC__STREAM_ENCODER_CLIENT_ERROR',
'FLAC__STREAM_ENCODER_IO_ERROR',
'FLAC__STREAM_ENCODER_FRAMING_ERROR',
'FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR');

Creo que esta versión es la buena :p


La franja horaria es GMT +2. Ahora son las 09:02:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi