尝试写入块时,在iffw库中获取错误

时间:2012-01-19 00:06:00

标签: c interop file-format amiga

当我尝试使用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

1 个答案:

答案 0 :(得分:2)

没有声称对此特定库有任何了解,但查看函数参数,我认为您可能在StartWGroup中输入了错误的大小。

来自iifw.cpp:IFFP StartWGroup( GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp)StartWGroup的第三个参数名称为groupSize,表示组LIST的大小,而不是子组大小{{1} }。