Visual Studios忽略文件

时间:2013-12-25 23:04:56

标签: c++ winapi directx directsound

Visual Studios忽略了我要播放的文件。使用此代码,它返回false,因为它不加载文件。

    result = LoadWaveFile("../Engine/data/sound01.wav", &m_secondaryBuffer1);
if (!result)
{
    return false;
}

1 个答案:

答案 0 :(得分:6)

不要在当前工作目录上使用相对路径。构造一个绝对路径,将GetModuleFileName与原始相对路径相结合。当前工作目录不可靠,不应使用。

编辑:当前目录有什么问题?简而言之,它是不稳定的。首先,该进程可能无法在预期的目录中启动(就像您的情况一样)。用户可以创建应用程序的快捷方式并在那里指定任何起始目录。其次,Windows API中有一些功能(特别是GetOpenFileName)可以将当前目录更改为副作用。第三,应用程序使用的某些第三方库可以更改当前目录。第四,当前目录在进程中是唯一的,在线程之间共享,因此即使你在依赖它之前调用SetCurrentDirectory,其他一些线程也可以在同一时间更改它。

在小型演示应用案例中,所有这些原因几乎都不存在,您甚至可以通过设置Project>来防止第一个原因。属性>配置属性>调试>工作目录到$(OutDir),如果你要从调试器启动应用程序。这是一个非常具体的用例,所以我会选择不依赖于当前目录的易失性的更强大的解决方案。