Ошибка DirectX в старых системах XP

8

Я слепой программист, работающий над аудио-игрой для слепых. Я использую SlimDX, и он был протестирован на десятках систем от XP до Win 8.1. Мой код работает на большинстве систем просто отлично, но я получаю следующую ошибку во время выполнения на нескольких старых системах XP:

vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:

DSERR_INVALIDCALL: этот вызов недопустим для текущего состояния этого объекта (-2005401550)

at SlimDX.Result.Throw[T](Object dataKey, Object dataValue)
at SlimDX.Result.Record[T](Int32 hr, Boolean failed, Object dataKey, Object dataValue)
at SlimDX.DirectSound.SecondarySoundBuffer..ctor(DirectSound device, SoundBufferDescription description)
at RR.Sound..ctor(String fileName)

Та же ошибка повторяется для каждого звука, который он пытается использовать. Вот код, который я использую для настройки устройства DS:

dsDevice = Новый SlimDX.DirectSound.DirectSound

dsDevice.SetCooperativeLevel (OGw.Handle, SlimDX.DirectSound.CooperativeLevel.Normal)

Я понимаю, что есть другие флаги, которые можно установить, но пока эта базовая установка работала хорошо, за исключением старых систем XP. Это мой первый пост, поэтому надеюсь, что я вхожу в него правильно, если нет, пожалуйста, дайте мне знать, иногда трудно сказать, где вы находитесь или должны быть с программой для чтения экрана на форумах.

user3123309
источник
3
Добро пожаловать на сайт! Я немного отредактировал ваш вопрос, чтобы изменить форматирование. Если вы столкнулись с какими-либо трудностями при использовании сайта, пожалуйста, сообщите нам о мета .
MichaelHouse
1
Каков результат SetCooperativeLevel()? Он возвращает HRESULT любое значение, отличное от того, которое DS_OKможет указывать на проблему.
congusbongus

Ответы:

1

Вы должны проверить результат SetCooperativeLevel ().

Согласно документации версии DirectSound8, это возможные возвращаемые значения:

  • DS_OK DSERR_ALLOCATED
  • DSERR_INVALIDPARAM
  • DSERR_UNINITIALIZED
  • DSERR_UNSUPPORTED

Узнайте, какой из них вы получите первым. Может быть, вы просто забыли инициализировать звуковое устройство?

Кроме того, в разделе замечаний говорится: «Не вызывайте этот метод, если какие-либо буферы заблокированы».

Документы: http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setcooperativelevel%28v=vs.85%29.aspx

bogglez
источник