当我尝试使用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很受欢迎。顺便说一句,你知道DjVU,RMFF,AIFF, RIFF and many other formats are IFF or slight variations吗?
答案 0 :(得分:2)
没有声称对此特定库有任何了解,但查看函数参数,我认为您可能在StartWGroup中输入了错误的大小。
来自iifw.cpp:IFFP StartWGroup( GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp)
,StartWGroup
的第三个参数名称为groupSize
,表示组LIST
的大小,而不是子组大小{{1} }。