1) sizeof(char) всегда и при любых условиях 1 !
2) Есть волшебная штука
SetLastError и
GetLastError.
3)Утечки у тебя в коде присутвуют, как пример:
char* ReadStream(const CFB::CompoundFileReader& reader, const CFB::COMPOUND_FILE_ENTRY* entry) {
char* buf = new char[entry->size]; // Круто, выделил память и всё
reader.ReadFile(entry, 0, buf, entry->size); // использовал память
return buf; // return ?? серьёзно ?? а очистить память ?
}
Прочитай про сборщики мусора вроде cdecl и других.
Создавай глобальные переменные и туда выделяй память, а в конце очищай, на мой взгляд лучше использовать malloc и free.
Дальше ничем не помогу.