ERLEDIGT
JA
JA
ANTWORTEN
1
1
ZUGRIFFE
1013
1013
EMPFEHLEN
-
hallo,
dies ist ein etwas komplexeres problem wobei ich mir noch nicht einmal 100% sicher bin ob es daran überhaupt liegen könnte.
ich nutze die message MM_WOM_DONE aus der mmsystem.h. sie wird aufgerufen wenn eine audiodatei erfolgreich abgespielt wurde. jetzt habe ich bei mir eine checkbox für ein replay (endlosschleife) der audiodatei. der datenpuffer liegt in einem WAVEHDR struct bereit (lpData) und wird beim ersten start ausgeführt (funktioniert). danach sollte der zeiger auf den anfang des buffers zeigen und die daten erneut abspielen. genau da ist mein problem. irgendwie verarbeitet das MSG struct meinen zeiger auf die daten nicht richtig, ich bekomme eine vollkommen andere adresse welche nicht zum vorherigen buffer passt. ich vermute das die message nicht richtig verarbeitet wird. ich habe unter MESSAGE.message den wert 0 stehen. eigentlich sollte da doch die nachrichten nummer darin stehen. im rotmarkierten bereich wird meinem LPWAVEHDR struct die falsche adresse übergeben weswegen mir das programm aussteigt.
hat schon einmal jemand etwas mit dieser nachricht zu tun gehabt sodass er mir weiterhelfen kann? ist sie in der message map richtig eingebunden?
die anderen funktionen habe ich oft genug durch debugged, da kann der fehler definitiv nicht liegen. ich vermute eine falsche nachrichtenverarbeitung...
Code :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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
void CWiwoDlg::MMWOMDone(MSG &Message) { // current data buffer block that has // completed playback, reload and requeue char mesg[MSG_LEN_S]; LPWAVEHDR lpwho; MMRESULT rc; MMTIME mmtime; static int deltat; if(!(oup_ing || io_ing)) // no output process started return; // skip this WOM_DONE message [COLOR="Red"]lpwho = (LPWAVEHDR)Message.lParam;[/COLOR] if(lpwho == NULL) return; /*-------------------------------------------*/ mmtime.wType = TIME_SAMPLES; waveOutGetPosition(hwo, &mmtime, sizeof(MMTIME)); deltat = mmtime.u.sample; if(iOuCnt >= GlPar.nMBuffers) { if(OutRep) iOuCnt = 0; else { SendMessage(CM_OUPCOMPLETE, (WPARAM)0, (LPARAM)0); return; } } if(oup_ing) { OutputDataProc(lpwho); iOuCnt++; } /*-------------------------------------------*/ if(io_ing) IOOutDataProc(lpwho); // EN8 ##### rc = waveOutPrepareHeader(hwo, lpwho, sizeof(WAVEHDR)); if(rc == MMSYSERR_NOERROR) rc = waveOutWrite(hwo, lpwho, sizeof(WAVEHDR)); else { waveOutGetErrorText(rc, mesg, MSG_LEN_S); MessageBox("WMM Done", mesg, MB_OK); CloseWaveOutput(GetSafeHwnd()); } /* used only to check processing time in output phase*/ mmtime.wType = TIME_SAMPLES; waveOutGetPosition(hwo, &mmtime, sizeof(MMTIME)); }
in der message map habe ich die nachricht wie folgt integriert:
Code :1
ON_MESSAGE(MM_WOM_DONE, MMWOMDone)
-
habs gelöst...
seltsamerweise erhalte ich beim zugriff über das MSG STRUCT nur in wParam einen Wert, jedoch verschieden vom Buffer. ich habe die signatur der methode jetzt wie folgt geändert:
Code :1
LRESULT MMWOMDone(WPARAM wParam, LPARAM lParam);
plötzlich erhalte ich in beiden Parametern Werte wobei in lParam die richtige Adresse vom Bufferende übergeben wird. die registrierung in der message map bleibt dabei unberührt.
mfg cappaja
Ähnliche Themen
-
Nutzen von Klassen und Funktionen
Von exitboy im Forum PHPAntworten: 14Letzter Beitrag: 04.06.08, 14:01 -
vordefinierte Parameter in Funktionen nutzen?
Von mahon im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 10.09.07, 23:15 -
Windows Funktionen nutzen
Von TobGod im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 22.01.07, 09:35 -
Klasse in Funktionen nutzen?
Von danielmueller im Forum PHPAntworten: 6Letzter Beitrag: 08.09.04, 11:14 -
Funktionen aus DLLs nutzen
Von Rene Albrecht im Forum C/C++Antworten: 9Letzter Beitrag: 24.10.03, 21:28





Zitieren
Login






