Tôi là một lập trình viên khiếm thị, làm việc trên một trò chơi âm thanh dành cho người mù. Tôi đang sử dụng SlimDX và nó đã được thử nghiệm trên hàng chục hệ thống từ XP đến Win 8.1. Mã của tôi hoạt động tốt trên hầu hết các hệ thống, nhưng tôi gặp lỗi sau khi chạy trên một số hệ thống XP cũ hơn:
vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:
DSERR_INVALIDCALL: Cuộc gọi này không hợp lệ cho trạng thái hiện tại của đối tượng này (-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)
Lỗi tương tự được lặp lại cho mỗi âm thanh mà nó đang cố sử dụng. Đây là mã tôi đang sử dụng để thiết lập thiết bị DS:
DSDevice = SlimDX mới.DirectSound.DirectSound
DSDevice.SetCooperativeLevel (OGw.Handle, SlimDX.DirectSound.CooperativeLevel.N normal)
Tôi nhận thấy có những cờ khác có thể được đặt, nhưng thiết lập cơ bản này đã hoạt động tốt cho đến nay, trừ các hệ thống XP cũ hơn. Đây là bài viết đầu tiên của tôi, vì vậy hy vọng tôi nhập nó đúng cách, nếu không, xin vui lòng cho tôi biết, đôi khi rất khó để biết bạn đang ở đâu hoặc nên ở đâu với một trình đọc màn hình trên các diễn đàn.
SetCooperativeLevel()
gì? Nó trả về một HRESULT
giá trị bất kỳ khác ngoài DS_OK
có thể chỉ ra một vấn đề.