2012-01-19 11 views
8

Cuando intento utilizar el EA iffw.c library para escribir un archivo IFF, no puedo pasar la llamada a StartWGroup(). Falla en IFFWriteBytes() porque context-> ckHdr.ckSize es cero. Dentro de IFFWriteBytes() hay un if() que comprueba que (size)! = SzNotYetKnown. (szNotYetKnown es una constante.) El example parece indicar que debería funcionar, pero no puedo ver cómo. IFFWriteBytes() devuelve CLIENT_ERROR porque nBytes es 4 - Estoy intentando guardar un int de 32 bits.Obtener un error en la biblioteca iffw al intentar escribir el fragmento

Mi código no:

outfp = fopen(outfile, "wb"); 

ifferr = OpenWIFF(outfp, &filec, szNotYetKnown); 

if (ifferr) { 
    return 2; 
} 

ifferr = StartWGroup(&filec, LIST, sizeof (ID_NATAMI_FLASH), ID_NATAMI_FLASH, &listc); 

if (ifferr) { 
    printf("ifferr: %d\n", ifferr); 
    return 3; 
} 

La última falla, StartWGroup().

IFF es, como XML, lo suficientemente simple como para poder generarlo sin una biblioteca, pero sería bueno utilizar una biblioteca que alguna vez fue una biblioteca común y bien probada.

Pregunta realmente no es sobre Amiga, pero este formato de archivo era popular en Amiga. Por cierto, ¿sabía DjVU, RMFF, AIFF, RIFF and many other formats are IFF or slight variations?

Actualización: easy to read IFF description.

+0

No estoy seguro de que lo entiendo. StartWGroup parece sugerir que está comenzando un grupo (¿como un elemento XML?) Que necesita ser "cerrado" con EndWGroup(). Pareces estar diciendo que estás usando StartWGroup() para escribir un int de 32 bits que parece "incorrecto" - ¿me falta algo? – John3136

+0

EndWGroup se cierra, como dices. Pero el programa falla sin que llegue demasiado lejos. (EndWGroup tampoco escribe una etiqueta final, vuelve atrás y actualiza la longitud del fragmento en su lugar. Así que la biblioteca de EA básicamente crea una API similar a XML para escribir la etiqueta final, donde de hecho no hay etiquetas finales.) –

+0

¿No es esto? pregunta cpp? El enlace apunta a iifw.cpp not iifw.c. – AoeAoe

Respuesta

2

No afirmo saber nada sobre esta biblioteca en particular, pero mirando los argumentos de la función creo que puede haber ingresado el tamaño incorrecto en StartWGroup.

De iifw.cpp: IFFP StartWGroup(GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp), el tercer nombre de argumento de StartWGroup es groupSize que indica el tamaño del grupo LIST y no el tamaño del subgrupo sizeof(ID_NATAMI_FLASH).

Cuestiones relacionadas