当我尝试使用EA iffw.c library编写IFF文件时,我无法通过StartWGroup()调用。它在IFFWriteBytes()中失败,因为context-> ckHdr.ckSize为零。在IFFWriteBytes()内部有一个if()来检查(size)!= szNotYetKnown。 (szNotYetKnown是一个常数。)example似乎表明它应该工作,但是我看不到如何。
IFFWriteBytes()返回CLIENT_ERROR,因为nBytes为4-我正在尝试保存32位int。

我失败的代码:

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;
}

最后一个失败,StartWGroup()。

IFF和XML一样简单,可以不用一个库就可以生成它,但是最好使用曾经很常见且经过良好测试的库。

问题不是关于Amiga的,而是这种文件格式在Amiga上很流行。顺便问一下,您知道DjVURMFFAIFF, RIFF and many other formats are IFF or slight variations吗?

更新:easy to read IFF description

最佳答案

我并不声称对这个特定的库一无所知,而是查看函数参数,我认为您可能在StartWGroup中输入了错误的大小。

在iifw.cpp:IFFP StartWGroup( GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp)中,StartWGroup的第三个参数名称是groupSize,指示组LIST的大小,而不是子组大小sizeof(ID_NATAMI_FLASH)

关于c - 尝试编写块时在iffw库中获取错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8919368/

10-09 06:23