Probleme mit waveInProc
-
Hallo,
ich schreibe gerade eine Applikation, die Daten von einer Soundkarte via WaveIn aufnehmen soll. Leider habe ich gerade einige Probleme mit waveInProc.
Ich rufe waveInOpen mit CALLBACK_FUNCTION waveInProc auf.
Die Callback-Funktion habe ich angelegt und diese wird, sobald
der übergebene Puffer von der Soundkarte gefüllt wurde, auch
korrekt aufgerufen.Leider habe ich in meiner CALLBACK_FUNCTION keinen Zugriff auf
meine Member-Variablen, die ja auch meine WAVEHDR-Daten und Co enthält.
(Ich will ja die Daten von der Soundkarte wieder zurückbekommen).
Ein Aufruf einer anderen Memberfunktion führt auch zu keinem Ergebnis.Meine Frage nun: Wie bewerkstellige ich, dass ich wie unten angegebenen Beispiel in WaveIn1SendBuffer Zugriff auf string1 und natürlich auch alle anderen Member-Variablen habe?
Danke im voraus
Gruß
kk3003public: CString string1; string1 = "test"; [...] // Open the wave device void CTestDlg::WaveInOpen() { waveInOpen( &hWaveIn1, m_cWaveInDevices1.GetCurSel(), &waveIn1format, (ULONG)waveIn1Proc, 0L, CALLBACK_FUNCTION ); waveInPrepareHeader(hWaveIn1, &waveIn1Header1, sizeof(WAVEHDR)); waveInAddBuffer(hWaveIn1, &waveIn1Header1, sizeof(WAVEHDR)); waveInStart(hWaveIn1); } void CALLBACK waveIn1Proc(HWAVEIN hWaveIn1, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) { switch(uMsg) { case WIM_CLOSE: break; case WIM_DATA: { // pointer to mainDlg CTestDlg *pDlg=(CTestDlg*)dwInstance; pDlg->WaveIn1SendBuffer(); } break; case WIM_OPEN: break; default: break; } } void CTestDlg::WaveIn1SendBuffer() { MessageBox( string1 ); // ----> Hier kommt ein Access Violation Error :( }
-
weil du 0L übergibst?!
-
Hallo,
danke schon mal für die prompte Antwort.
MMRESULT waveInOpen( LPHWAVEIN phwi, UINT_PTR uDeviceID, LPWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwCallbackInstance, DWORD fdwOpen ); /* dwCallbackInstance User-instance data passed to the callback mechanism. This parameter is not used with the window callback mechanism. */Das "0L" steht doch dann für dwInstance. Da ich aber nur eine Instanz habe, sollte doch 0L Ok sein?

Danke für Info
Gruß´
kk3003
-
du musst this übergeben
-

Perfekt. Man wird echt betriebsblind, wenn es nicht gleich auf das zweite Mal klappt und man nur rumstochert!

waveInOpen( &hWaveIn1, m_cWaveInDevices1.GetCurSel(), &waveIn1format, (ULONG)waveIn1Proc, (ULONG)this, CALLBACK_FUNCTION );Das klappt problemlos!
Danke nochmal.
Gruß
kk3003