Visual Studios игнорирует файл, который я пытаюсь воспроизвести. С этим кодом он возвращает false, так как не загружает файл.
result = LoadWaveFile("../Engine/data/sound01.wav", &m_secondaryBuffer1);
if (!result)
{
return false;
}
Не используйте относительный путь в текущем рабочем каталоге. Построить вместо этого абсолютный путь, объединяя GetModuleFileName
и ваш первоначальный относительный путь. Текущий рабочий каталог ненадежен и не должен использоваться.
РЕДАКТИРОВАТЬ: Что не так с текущими каталогами? Короче говоря, это изменчиво. Во-первых, процесс может не запуститься в ожидаемом каталоге (как это было в вашем случае). Пользователь может создать ярлык для приложения и указать любой начальный каталог там. Во-вторых, в Windows API есть функции (особенно GetOpenFileName
), который может изменить текущий каталог как побочный эффект. В-третьих, какая-то третья часть библиотеки, используемая приложением, может изменить текущий каталог. В-четвертых, текущий каталог является уникальным в процессе, общий для потоков, так что даже если вы вызываете SetCurrentDirectory
прежде чем полагаться на это, какой-то другой поток может изменить его в это время.
В небольшом демонстрационном приложении все эти причины практически не существуют, и вы можете даже предотвратить первую причину, установив для параметра Project> Свойства> Свойства конфигурации> Отладка> Рабочий каталог значение $ (OutDir), если вы когда-либо собираетесь запустить приложение из отладчика. Однако это очень специфический вариант использования, поэтому я бы остановился на более надежном решении, которое не зависит от изменчивой природы текущего каталога.
Других решений пока нет …