OggVorbis ov_open() создает исключение нарушения прав доступа
Я пытаюсь открыть файл 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
для того, чтобы это было обработано соответственно.
Технические характеристики:
- Windows 10
- Visual Studio Express 2013
_MSC_VER
1800libogg.dll
v1.3.2 (текущий)libvorbis.dll
v1.3.5 (текущий)
ПРИМЕЧАНИЕ. Загруженный исходный код Vorbis содержал только файлы решений и проектов до VS2010. Я открыл решения VS2010 в Visual Studio Express 2013, чтобы скомпилировать их для обеспечения совместимости с моим проектом. Мне также интересно, может ли это привести к некоторым проблемам.
1 ответ
Документация 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);