2012-01-19 9 views
8

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.

+0

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

+0

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.) –

+0

Non è questo domanda cpp? Link a iifw.cpp not iifw.c. – AoeAoe

risposta

2

Non pretendere di sapere nulla su questa particolare libreria, ma guardando gli argomenti della funzione penso che tu possa aver inserito la dimensione sbagliata in StartWGroup.

Da iifw.cpp: IFFP StartWGroup(GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp), il terzo nome argomento della StartWGroup è groupSize che indica la dimensione del gruppo LIST e non la dimensione sottogruppo sizeof(ID_NATAMI_FLASH).

Problemi correlati