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 1800
  • libogg.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);
Другие вопросы по тегам