2012-01-19 34 views
8

Khi tôi đang cố gắng sử dụng EA iffw.c library để viết một tệp IFF, tôi không thể vượt qua cuộc gọi StartWGroup(). Nó không thành công trong IFFWriteBytes() vì context-> ckHdr.ckSize là số không. Bên trong IFFWriteBytes() có một if() kiểm tra (size)! = SzNotYetKnown. (szNotYetKnown là một hằng số.) example dường như cho biết nó sẽ hoạt động, nhưng tôi không thể thấy như thế nào. IFFWriteBytes() trả về CLIENT_ERROR vì nBytes là 4 - Tôi đang cố lưu một int 32 bit.Nhận lỗi trong thư viện iffw khi cố viết chunk

đang thất bại của tôi: không

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; 
} 

cuối cùng, StartWGroup().

IFF, giống như XML, đủ đơn giản để tôi có thể tạo ra nó mà không cần thư viện, nhưng sẽ tốt hơn nếu sử dụng thư viện một lần và được kiểm tra tốt.

Câu hỏi không thực sự về Amiga, nhưng định dạng tệp này phổ biến trên Amiga. Nhân tiện, bạn có biết DjVU, RMFF, AIFF, RIFF and many other formats are IFF or slight variations không?

Cập nhật: easy to read IFF description.

+0

Không chắc chắn tôi đã hiểu. StartWGroup dường như đề nghị bạn đang bắt đầu một nhóm (như một phần tử XML?) Mà cần phải được "đóng" với EndWGroup(). Bạn dường như đang nói rằng bạn đang sử dụng StartWGroup() để viết một int 32 bit mà có vẻ "sai" - tôi thiếu cái gì? – John3136

+0

EndWGroup đóng, như bạn nói. Nhưng chương trình thất bại mà không có nó thậm chí nhận được rất xa. (EndWGroup cũng không viết một thẻ kết thúc, nó quay trở lại và cập nhật chiều dài đoạn văn bản. Vì vậy, thư viện EA về cơ bản tạo ra một API giống như XML để viết thẻ kết thúc, trong thực tế không có thẻ kết thúc.) –

+0

cpp câu hỏi? Liên kết các điểm đến iifw.cpp không iifw.c. – AoeAoe

Trả lời

2

Không yêu cầu biết bất kỳ điều gì về thư viện cụ thể này nhưng nhìn vào các đối số hàm tôi nghĩ bạn có thể đã nhập sai kích thước vào StartWGroup.

Từ iifw.cpp: IFFP StartWGroup(GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp), tên thứ ba đối số của StartWGroupgroupSize cho biết kích thước của nhóm LIST và không phải là nhóm kích thước sizeof(ID_NATAMI_FLASH).

Các vấn đề liên quan