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

Pro*_*ica 8 c interop file-format amiga

当我尝试使用EA iffw.c库来编写IFF文件时,我无法通过StartWGroup()调用.它在IFFWriteBytes()中失败,因为context-> ckHdr.ckSize为零.在IFFWriteBytes()里面有一个if(),它检查(size)!= szNotYetKnown.(szNotYetKnown是一个常量.)这个例子似乎表明它应该有效,但我看不出如何.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;
}
Run Code Online (Sandbox Code Playgroud)

最后一次失败,StartWGroup().

IFF和XML一样简单,我可以在没有库的情况下生成它,但是使用曾经常见且经过良好测试的库会更好.

问题不是关于Amiga,但这种文件格式在Amiga上很受欢迎.顺便说一句,你知道DjVU,RMFF,AIFF,RIFF和许多其他格式是IFF还是略有变化

更新: 易于阅读IFF描述.

小智 2

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

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