首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OggVorbis ov_open()引发访问冲突异常

OggVorbis ov_open()引发访问冲突异常
EN

Stack Overflow用户
提问于 2016-09-09 18:43:01
回答 1查看 118关注 0票数 1

我试图使用Vorbis /DLL打开一个OggVorbis文件。ov_open()引发访问冲突异常0x00000014。我已经检查了文件是否存在:我用fopen打开了它,并将内容打印到控制台,只是为了检查--一切都进行得很好!

可能没有什么不同,但DLL已编译为调试Win32,而且我的项目正在同一配置下编译。

我正在使用文件的绝对路径,以保证文件的存在。如前所述,我可以自己打开和阅读。

*.ogg文件以192 fine的速度使用FL Studio呈现,并且在Audition和中打开并播放良好。

这是我必须打开文件并将其发送到Vorbis库的代码(代码来自教程):

代码语言:javascript
复制
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“代码:

代码语言:javascript
复制
// 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 == 0whence == 1

我确实看到方法名包含"64“。这可能是想读取64位编码的文件吗?或者,当它实际编译为32位时,它是否试图以64位的形式运行?或者这根本不是问题吗?

此外,当我遵循教程时,我注意到代码中有一些错误需要纠正。因此,我想知道本教程是否足够“完整”,即:可能有一些变量我应该#define,或者在将打开的文件发送到ov_open之前可能缺少的一些变量,以便相应地处理它。

技术规格:

  • Windows 10
  • Visual 2013
  • _MSC_VER 1800
  • libogg.dll v1.3.2 (电流)
  • libvorbis.dll v1.3.5 (电流)

注意:下载的源代码只包含解决方案和项目文件,直到VS2010为止。我在中打开了VS2010解决方案来编译它们,以实现与我的项目的兼容性。我也想知道这是否会导致一些问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-09 18:55:33

OggVorbis文档建议不要在windows上使用ov_open (open.html)。

使用ov_open_callbacks代替。

像这样的事情应该有效:

代码语言:javascript
复制
ov_open_callbacks(oggFile, &oggStream, NULL, 0, OV_CALLBACKS_DEFAULT);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39417913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档