我试图使用Vorbis /DLL打开一个OggVorbis文件。ov_open()引发访问冲突异常0x00000014。我已经检查了文件是否存在:我用fopen打开了它,并将内容打印到控制台,只是为了检查--一切都进行得很好!
可能没有什么不同,但DLL已编译为调试Win32,而且我的项目正在同一配置下编译。
我正在使用文件的绝对路径,以保证文件的存在。如前所述,我可以自己打开和阅读。
*.ogg文件以192 fine的速度使用FL Studio呈现,并且在Audition和中打开并播放良好。
这是我必须打开文件并将其发送到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位编码的文件吗?或者,当它实际编译为32位时,它是否试图以64位的形式运行?或者这根本不是问题吗?
此外,当我遵循教程时,我注意到代码中有一些错误需要纠正。因此,我想知道本教程是否足够“完整”,即:可能有一些变量我应该#define,或者在将打开的文件发送到ov_open之前可能缺少的一些变量,以便相应地处理它。
技术规格:
_MSC_VER 1800libogg.dll v1.3.2 (电流)libvorbis.dll v1.3.5 (电流)注意:下载的源代码只包含解决方案和项目文件,直到VS2010为止。我在中打开了VS2010解决方案来编译它们,以实现与我的项目的兼容性。我也想知道这是否会导致一些问题。
发布于 2016-09-09 18:55:33
OggVorbis文档建议不要在windows上使用ov_open (open.html)。
使用ov_open_callbacks代替。
像这样的事情应该有效:
ov_open_callbacks(oggFile, &oggStream, NULL, 0, OV_CALLBACKS_DEFAULT);https://stackoverflow.com/questions/39417913
复制相似问题