Ich bin ein blinder Programmierer und arbeite an einem Hörspiel für Blinde. Ich verwende SlimDX und es wurde auf Dutzenden von Systemen von XP bis Win 8.1 getestet. Mein Code funktioniert auf den meisten Systemen einwandfrei, aber auf einigen wenigen XP-Systemen wird zur Laufzeit der folgende Fehler angezeigt:
vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:
DSERR_INVALIDCALL: Dieser Aufruf ist für den aktuellen Status dieses Objekts nicht gültig (-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)
Der gleiche Fehler wird für jeden Sound wiederholt, den er verwenden möchte. Hier ist der Code, den ich zum Einrichten des DS-Geräts verwende:
dsDevice = Neuer SlimDX.DirectSound.DirectSound
dsDevice.SetCooperativeLevel (OGw.Handle, SlimDX.DirectSound.CooperativeLevel.Normal)
Mir ist klar, dass es andere Flags gibt, die gesetzt werden können, aber diese Grundeinstellung hat bisher gut funktioniert, abzüglich der älteren XP-Systeme. Dies ist mein erster Beitrag. Ich hoffe, ich gebe ihn richtig ein. Wenn nicht, lassen Sie es mich bitte wissen. Manchmal ist es schwierig zu sagen, wo Sie sich befinden oder mit einem Screenreader in den Foren sein sollten.
SetCooperativeLevel()
? Es wird einHRESULT
beliebiger Wert zurückgegeben, derDS_OK
möglicherweise auf ein Problem hinweist.Antworten:
Sie sollten das Ergebnis von SetCooperativeLevel () überprüfen.
Laut Dokumentation der DirectSound8-Version sind dies die möglichen Rückgabewerte:
Finden Sie heraus, welche Sie zuerst erhalten. Vielleicht haben Sie gerade vergessen, das Audiogerät zu initialisieren?
Außerdem heißt es im Abschnitt "Bemerkungen": "Rufen Sie diese Methode nicht auf, wenn Puffer gesperrt sind."
Dokumente: http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setcooperativelevel%28v=vs.85%29.aspx
quelle