Я пытаюсь открыть файл OggVorbis с помощью Vorbis SDK / DLL. ov_open()
генерирует исключение нарушения прав доступа 0x00000014
, Я проверил, существует ли файл: я открыл его fopen
и распечатал содержимое на консоль просто для проверки — все прошло нормально!
Может не иметь значения, но библиотеки DLL были скомпилированы как DEBUG Win32, и мой проект компилируется под ту же конфигурацию.
Для уверенности я использую абсолютный путь к файлу, и файл существует. Как было сказано ранее, я могу открыть и прочитать это сам.
Файл * .ogg был отредактирован с использованием FL Studio со скоростью 192 кбит / с, а также открывается и прекрасно воспроизводится в Adobe Audition и VLC Media Player.
Это код, который я должен открыть файл и отправить его в библиотеку Vorbis (код пришел из этот руководство):
FILE* oggFile;
const char* path = "C:\\absolute\\path\\to\\file.ogg";
const char* openMode = "rb";
int result;
if (!(oggFile = fopen(path, openMode)))
{
throw std::string("Could not open file.");
}
if ((result = ov_open(oggFile, &oggStream, NULL, 0)) < 0)
{
// Never gets here
fclose(oggFile);
throw std::string("Could not open Ogg stream: ");
}
Код «Vorbis», где выдается исключение:
// vorbisfile.c: line #827
static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence) {
if(f==NULL)return(-1);
return fseek(f,off,whence); // Exception thrown here
}
С этой точки зрения, off == 0
а также whence == 1
,
Я вижу, что имя метода содержит «64». Может ли это быть желание прочитать 64-битный кодированный файл? Или он пытается работать как 64-битный, когда он фактически скомпилирован как 32-битный? Или это вообще не проблема? :П
Кроме того, следуя руководству, я заметил, что в коде было несколько ошибок, которые мне пришлось исправить. Так что мне интересно, достаточно ли «урок» урок, то есть: возможно, есть какая-то переменная, которую я должен #define
или что-то еще, что, возможно, отсутствует до отправки открытого файла ov_open
для того, чтобы это было обработано соответственно.
Технические характеристики:
_MSC_VER
1800libogg.dll
v1.3.2 (текущий)libvorbis.dll
v1.3.5 (текущий)НОТА: Загруженный Vorbis только исходный код Решение а также проект файлы до VS2010. Я открыл VS2010 Решения в Visual Studio Express 2013, чтобы скомпилировать их для достижения совместимости с моим проектом. Мне также интересно, может ли это привести к некоторым проблемам.
Документация OggVorbis рекомендует не использовать ov_open в Windows (https://xiph.org/vorbis/doc/vorbisfile/ov_open.html).
Вместо этого используйте ov_open_callbacks.
Примерно так должно работать:
ov_open_callbacks(oggFile, &oggStream, NULL, 0, OV_CALLBACKS_DEFAULT);
Других решений пока нет …