2012-01-19 4 views
8

EA iffw.c library을 사용하여 IFF 파일을 쓰려고 할 때 StartWGroup() 호출을 지나칠 수 없습니다. context-> ckHdr.ckSize가 0이므로 IFFWriteBytes()에서 실패합니다. IFFWriteBytes() 안에는 (size)! = szNotYetKnown을 검사하는 if()가 있습니다. (szNotYetKnown은 상수입니다.) example은 작동해야한다고 생각하는 것처럼 보이지만 어떻게 볼 수는 없습니다. IFFWriteBytes()는 nBytes가 4이므로 CLIENT_ERROR를 반환합니다. 32 비트 정수를 저장하려고합니다.청크를 쓰려고 할 때 iffw 라이브러리에서 오류 가져 오기

내 고장 코드 :

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에서 인기가 있습니다. 그런데 DjVU, RMFF, AIFF, RIFF and many other formats are IFF or slight variations을 알고 계셨습니까?

업데이트 : easy to read IFF description.

+0

잘 모르겠습니다. StartWGroup은 EndWGroup()을 사용하여 "닫아야"하는 그룹 (XML 요소와 같은 그룹)을 시작한다고 제안하는 것 같습니다. 당신은 StartWGroup()을 사용하여 "틀린 것"으로 보이는 32 비트 정수를 쓰고 있다고 말하는 것 같습니다 - 제가 빠진 것이 있습니까? – John3136

+0

EndWGroup이 닫힙니다. 그러나이 프로그램은 아주 멀리 떨어져 있어도 실패합니다. (EndWGroup은 끝 태그도 쓰지 않고 대신에 청크 길이를 업데이트합니다. 그래서 EA 라이브러리는 기본적으로 끝 태그를 쓰는 XML과 비슷한 API를 만듭니다. –

+0

그렇지 않습니다. Cpp 질문? 연결 지점이 iifw.cpp가 아닌 iifw.c입니다. – AoeAoe

답변

2

이 특정 라이브러리에 대해 아무 것도 알지 못하지만 함수 인수를 살펴보면 StartWGroup에 잘못된 크기를 입력했을 수도 있습니다. iifw.cpp에서

: IFFP StartWGroup(GroupContext* parent, int groupType,int groupSize,int subtype, GroupContext * newtmp), 세 번째 인수의 그룹 LIST의 크기를 나타내는 StartWGroup입니다 groupSize의 이름이 아닌 서브 그룹 크기 sizeof(ID_NATAMI_FLASH).