Получить ошибку в библиотеке iffw при попытке записи чанка - PullRequest
8 голосов
/ 19 января 2012

Когда я пытаюсь использовать библиотеку EA iffw.c для записи файла IFF, я не могу пройти вызов StartWGroup (). Сбой в IFFWriteBytes (), потому что context-> ckHdr.ckSize равен нулю. Внутри IFFWriteBytes () есть if (), который проверяет, что (размер)! = 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, достаточно прост, чтобы я мог просто сгенерировать его без библиотеки, но было бы неплохо использовать некогда распространенную и хорошо протестированную библиотеку.

Вопрос не совсем об Амиге, но этот формат файлов был популярен на Амиге. Кстати, знаете ли вы DjVU , RMFF , AIFF, RIFF и многие другие форматы IFF или небольшие вариации ?

Обновление : Легко читаемое описание IFF .

1 Ответ

2 голосов
/ 12 апреля 2012

Не утверждая, что ничего не знал об этой конкретной библиотеке, но, глядя на аргументы функции, я думаю, что вы, возможно, ввели неверный размер в StartWGroup.

Из iifw.cpp: IFFP StartWGroup( GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp), имя третьего аргументаStartWGroup - это groupSize, обозначающий размер группы LIST, а не размер подгруппы sizeof(ID_NATAMI_FLASH).

...