Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.03.2008, 14:49

LPDIRECTSOUNDBUFFER8->Lock() lässt Programm abstürzen

So, nachdem ich im DirectX-Forum meine Probleme behoben habe wollte ich nach einer Urlaubspause an den Sound-Teil machen. Dazu habe ich mir aus dem Buch den Code zum öffnen einer normalen Wave-Datei kopiert und an mein Programm angepasst. Nun tritt ein Problem bei der oben genannten Funktion auf.
Hier mal der Code der den Fehler auslöst:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
DSBUFFERDESC tmpDesc;
    tmpDesc.dwSize = sizeof(DSBUFFERDESC);
    tmpDesc.dwFlags = DSBCAPS_STATIC | DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY;
    tmpDesc.dwBufferBytes =dataSize;
    tmpDesc.dwReserved = 0;
    tmpDesc.lpwfxFormat = &tmpFormat;
    LPDIRECTSOUNDBUFFER tmpBuffer;
    LPDIRECTSOUNDBUFFER8 tmpBuffer8;
    directSound->CreateSoundBuffer(&tmpDesc, &tmpBuffer, NULL);
    directSound->QueryInterface(IID_IDirectSoundBuffer8, (void**)(&tmpBuffer8));
    tmpBuffer->Release();
    MessageBox(wndHandle,"tmpBuffer released","tmpBuffer",0);

    HRESULT r;
    r = tmpBuffer8->Lock(0,0,&tmpVoid,&NumBytes,NULL,NULL,DSBLOCK_ENTIREBUFFER);
    switch(r)
    {
    case DS_OK:
        MessageBox(wndHandle,"Buffer gesperrt","DS_OK",0);
        break;
    case DSERR_BUFFERLOST:
        MessageBox(wndHandle,"Buffer verloren","DSERR_BUFFERLOST",0);
        break;
    case DSERR_INVALIDCALL:
        MessageBox(wndHandle,"Fehler beim Aufruf","DSERR_INVALIDCALL",0);
        break;
    case DSERR_INVALIDPARAM:
        MessageBox(wndHandle,"Fehlerhafte Parameter","DSERR_INVALIDPARAM",0);
        break;
    case DSERR_PRIOLEVELNEEDED:
        MessageBox(wndHandle,"höhere Priorität benötigt","DSERR_PRIOLEVELNEEDED",0);
        break;
    default:
        MessageBox(wndHandle,"Unbekannter Fehler aufgetreten","unbekannt",0);
    }

    MessageBox(wndHandle,"Buffer8 gesperrt","Buffer8",0);


Das ganze Programm stürzt hier an der Stelle ab, wo "lock" aufgerufen wird (die MsgBox vorher kommt noch). Dabei scheint die Funktion sich irgendwie "aufzuhängen" da sie noch nicht mal einen Rückgabewert liefert (keine der Switch-MsgBoxen wird angezeigt und die MsgBox am Ende auch nicht).
Die Chunks der Datei werden wie im Buch ausgelesen. Ich habs auch mit mehreren Dateien versucht und es wurden sowohl der Format- als auch der Datenchunk jedesmal gefunden.
Wäre sehr dankbar wenn mir jemand einen Tipp geben könnte.

3

24.03.2008, 15:19

Gerade den Debugger ausprobiert.
Der hängt sich an der selben Stelle einfach auf.

Werbeanzeige