DirectX-Fehler bei älteren XP-Systemen

8

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.

user3123309
quelle
3
Willkommen auf der Seite! Ich habe Ihre Frage etwas bearbeitet, um die Formatierung zu ändern. Wenn Sie auf Schwierigkeiten bei der Nutzung der Website stoßen, teilen Sie uns dies bitte auf Meta mit .
MichaelHouse
1
Was ist das Ergebnis von SetCooperativeLevel()? Es wird ein HRESULT beliebiger Wert zurückgegeben, der DS_OKmöglicherweise auf ein Problem hinweist.
Congusbongus

Antworten:

1

Sie sollten das Ergebnis von SetCooperativeLevel () überprüfen.

Laut Dokumentation der DirectSound8-Version sind dies die möglichen Rückgabewerte:

  • DS_OK DSERR_ALLOCATED
  • DSERR_INVALIDPARAM
  • DSERR_UNINITIALIZED
  • DSERR_UNSUPPORTED

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

bogglez
quelle