Quando si tenta di utilizzare EA iffw.c library per scrivere un file IFF, non riesco a superare la chiamata StartWGroup(). Fallisce in IFFWriteBytes() perché context-> ckHdr.ckSize è zero. All'interno di IFFWriteBytes() c'è un if() che controlla che (size)! = SzNotYetKnown. (szNotYetKnown è una costante.) Il example sembra indicare che dovrebbe funzionare, ma non riesco a vedere come. IFFWriteBytes() restituisce CLIENT_ERROR perché nBytes è 4 - Sto tentando di salvare un int a 32 bit.Errore nella libreria iffw durante il tentativo di scrittura di blocchi
Il mio codice non riuscendo:
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;
}
L'ultimo fallisce, StartWGroup().
IFF è, come XML, abbastanza semplice da poterlo generare senza una libreria, ma sarebbe bello utilizzare una libreria una volta comune e ben testata.
La domanda non riguarda davvero Amiga, ma questo formato di file era popolare su Amiga. A proposito, lo sapevi che DjVU, RMFF, AIFF, RIFF and many other formats are IFF or slight variations?
Aggiornamento: easy to read IFF description.
Non sono sicuro di averlo capito. StartWGroup sembra suggerire di iniziare un gruppo (come un elemento XML?) Che deve essere "chiuso" con EndWGroup(). Sembra che tu stia usando StartWGroup() per scrivere un int a 32 bit che sembra "sbagliato" - mi manca qualcosa? – John3136
EndWGroup si chiude, come dici tu. Ma il programma fallisce senza nemmeno arrivare molto lontano. (EndWGroup inoltre non scrive un tag di fine, ma torna indietro e aggiorna la lunghezza del blocco. Quindi la libreria di EA crea fondamentalmente un'API di tipo XML per scrivere il tag di fine, dove in effetti non ci sono tag di chiusura.) –
Non è questo domanda cpp? Link a iifw.cpp not iifw.c. – AoeAoe