size_t VorbisfileUser::readFunc(void *ptr, size_t size, size_t nmemb, void *datasource) { VorbisfileUser *vu ; vu = (VorbisfileUser *)datasource ; DWORD readedBytes ; ReadFile(vu->srcFile, ptr, (DWORD)(size*nmemb), &readedBytes, NULL) ; return readedBytes ; } int VorbisfileUser::seekFunc(void *datasource, ogg_int64_t offset, int whence) { VorbisfileUser *vu ; vu = (VorbisfileUser *)datasource ; DWORD moveMethod; DWORD to; if(whence == SEEK_CUR){ moveMethod = FILE_CURRENT; to = (DWORD)offset; } else if(whence == SEEK_END){ moveMethod = FILE_END ; to = (DWORD)offset ; } else if(whence == SEEK_SET){ moveMethod = FILE_BEGIN; to = (DWORD)offset ; } else{ return -1; } DWORD result = SetFilePointer(vu->srcFile, to, NULL, moveMethod); return (result == 0xffffffff) ? -1 : 0; } int VorbisfileUser::closeFunc(void *datasource) { VorbisfileUser *vu ; vu = (VorbisfileUser *)datasource ; CloseHandle(vu->srcFile) ; vu->srcFile = NULL ; return 0 ; } long VorbisfileUser::tellFunc(void *datasource) { DWORD filePointer ; VorbisfileUser *vu ; vu = (VorbisfileUser *)datasource ; filePointer = SetFilePointer(vu->srcFile, 0, NULL, FILE_CURRENT) ; return filePointer ; }