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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]