8

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

我失败的代码:

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 和许多其他格式是 IFF 还是细微的变化

更新易于阅读的 IFF 说明

4

1 回答 1

2

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

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

于 2012-04-12T07:48:04.110 回答