?
Solved

wavein-problems

Posted on 1997-04-24
6
Medium Priority
?
294 Views
Last Modified: 2013-12-04
I wrote the following Callback-Function in order to
add the filled buffer, which is returned by the driver, again to drivers queue. I don't know why it doesn't work.
The driver stopps recording when the buffer is filled.
I would be verry glad if you could help me.

stephan




void CALLBACK  __export  WaveProc(

       HWAVE  hWave,      // handle of waveform device
       UINT  uMsg,      // sent message
       DWORD  dwInstance,      // instance data
       DWORD  dwParam1,      // application-defined parameter
       DWORD  dwParam2      // application-defined parameter
       )
{

 LPWAVEHDR lpWaveHdrTemp = (LPWAVEHDR) dwParam1;

  if( uMsg == WIM_DATA)
       {

             waveInUnprepareHeader((HWAVEIN) hWave, lpWaveHdrTemp ,sizeof(WAVEHDR) ) ;
              waveInPrepareHeader((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
              waveInAddBuffer((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
             
       }
}


0
Comment
Question by:stephan papadakis
  • 3
  • 3
6 Comments
 
LVL 15

Accepted Solution

by:
NickRepin earned 60 total points
ID: 1396904
API Reference for WaveProc says:Applications should not call any system-defined functions from inside a callback function, except for EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, and timeSetEvent. Calling other wave functions will cause deadlock.

0
 
LVL 15

Expert Comment

by:NickRepin
ID: 1396905
By the way, I said it before in answer to your question Q861187135 (4/16/97). But 'this question is locked until stephan papadakis evaluates the answer'  :(.
0
 

Author Comment

by:stephan papadakis
ID: 1396906
Thank's a lot for your answere.

The only problem is, how can i solve my problem?

What should i do know. Should i create a dummy Callback -Window?

If i do so the waveinopen-function returns errorcode 11h

wich means "function is called with wrong parameters".

0
Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

 

Author Comment

by:stephan papadakis
ID: 1396907
Thank's a lot for your answere.

The only problem is, how can i solve my problem?

What should i do know. Should i create a dummy Callback -Window?

If i do so the waveinopen-function returns errorcode 11h

wich means "function is called with wrong parameters".

0
 
LVL 15

Expert Comment

by:NickRepin
ID: 1396908
To avoid crash, you can try to process buffers in your window procedure, not in the callback function. For example:// Define our notify message#define WMU_FINISHED   (WM_USER+1)// Fill it with handle of our windowHWND wnd;// Callback functionvoid CALLBACK WaveProc(HWAVE hWave, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
  if( uMsg == WIM_DATA) {
      // Device driver is finished!      // Notify our window.      PostMessage(wnd,WMU_FINISHED,0,(LPARAM) dwParam1);   }}// Here is our window procedure... wndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){   LPWAVEHDR lpWaveHdrTemp = (LPWAVEHDR) lParam;
  switch(uMsg) {      // ...      case WMU_FINISHED:
          waveInUnprepareHeader((HWAVEIN) hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
          waveInPrepareHeader((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
          waveInAddBuffer((HWAVEIN)hWave, lpWaveHdrTemp, sizeof(WAVEHDR));
      // .....
}Also you can try to use callback window instead of callback function. May be there are no restrictions on calling wave* functions from inside of callback window.P.S. It will be nice if you can post me your source code to nick@rtzi.ru

0
 

Author Comment

by:stephan papadakis
ID: 1396909
Thank's a lot.

I got it.
The problem is solved.


stephan
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article, I will show how to use the Ribbon IDs Tool Window to assign the built-in Office icons to a ribbon button.  This tool will help us to find the OfficeImageId that corresponds to our desired built-in Office icon. The tool is part of…
What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Integration Management Part 2

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question