Kesalahan DirectX dengan sistem XP yang lebih lama

8

Saya seorang programmer buta, mengerjakan permainan audio untuk orang buta. Saya menggunakan SlimDX, dan telah diuji pada banyak sistem dari XP ke Win 8.1. Kode saya berfungsi pada sebagian besar sistem, tetapi saya mendapatkan kesalahan berikut saat runtime pada beberapa sistem XP yang lebih lama:

vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:

DSERR_INVALIDCALL: Panggilan ini tidak valid untuk keadaan objek ini saat ini (-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)

Kesalahan yang sama diulang untuk setiap suara yang coba digunakan. Berikut adalah kode yang saya gunakan untuk mengatur perangkat DS:

dsDevice = New SlimDX.DirectSound.DirectSound

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

Saya menyadari ada beberapa flag lain yang dapat diatur, tetapi pengaturan dasar ini telah bekerja dengan baik sejauh ini, minus sistem XP yang lebih lama. Ini adalah posting pertama saya, jadi harap saya memasukkannya dengan benar, jika tidak, tolong beri tahu saya, kadang-kadang sulit untuk mengatakan di mana Anda berada atau harus dengan screenreader di forum.

pengguna3123309
sumber
3
Selamat datang di situs ini! Saya sedikit mengedit pertanyaan Anda untuk mengubah format. Jika Anda menemukan kesulitan dalam menggunakan situs ini, beri tahu kami tentang meta .
MichaelHouse
1
Apa hasil dari SetCooperativeLevel()? Ia mengembalikan nilai HRESULT jadi apa pun selain yang DS_OKmengindikasikan masalah.
congusbongus

Jawaban:

1

Anda harus memeriksa hasil SetCooperativeLevel ().

Menurut dokumentasi versi DirectSound8, ini adalah nilai pengembalian yang mungkin:

  • DS_OK DSERR_ALLOCATED
  • DSERR_INVALIDPARAM
  • DSERR_UNINITIALISASI
  • DSERR_UNSUPPORTED

Cari tahu mana yang Anda dapatkan pertama kali. Mungkin Anda lupa menginisialisasi perangkat suara?

Juga, di bagian komentar tertulis: "Jangan panggil metode ini jika ada buffer yang dikunci."

Documents: http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setcooperativelevel%28v=vs.85%29.aspx

bogglez
sumber