allora per adesso non ho impostato alcuna callback ed ora ho il seguente codice:

codice:
#include <windows.h>
#pragma comment (lib, "winmm.lib")
#include <mmsystem.h>
#include <iostream>
#define system_buf_len 4096

BOOL CALLBACK myCallback();

int main()
{
	// Definisco la struttura WAVEFORMATEX
	WAVEFORMATEX waveFormat;
	waveFormat.wFormatTag      = WAVE_FORMAT_PCM;
	waveFormat.wBitsPerSample  = 16;
	waveFormat.nChannels       = 1;
	waveFormat.nSamplesPerSec  = 44100;
	waveFormat.nBlockAlign     = waveFormat.nChannels * waveFormat.wBitsPerSample / 8;
	waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign;
	waveFormat.cbSize          = 0;

	MMRESULT mmres;   // ...
	HWAVEIN phvi;     // Handle for the input device
	UINT uDevice = 0; // Device id "Gruppo Microfoni"

	// waveInOpen
	mmres = waveInOpen(&phvi,
					uDevice,
					(LPWAVEFORMATEX)&waveFormat,
					0,
					0,
					CALLBACK_EVENT
					);

	// Prepare Buffer
	char buf[system_buf_len];
	WAVEHDR buffer;
	buffer.lpData          = &buf;
	buffer.dwBufferLength  = system_buf_len;
	buffer.dwBytesRecorded = 0;
	buffer.dwUser          = 0;
	buffer.dwFlags         = 0;
	buffer.dwLoops         = 0;

	// waveInPrepareHeader
	waveInPrepareHeader(phvi, &buffer, sizeof(WAVEHDR));

	// waveInAddBuffer
	waveInAddBuffer(phvi, &buffer, sizeof(WAVEHDR));

	return 0;
}
mi ritorna questo errore alla riga di codice:

codice:
buffer.lpData          = &buf;
cannot convert from 'char (*)[4096]' to 'LPSTR'

credevo dovessi passargli un pointer al buffer (buf)...

così ho letto su:
http://msdn.microsoft.com/en-us/library/aa909814.aspx
lpData

Long pointer to the address of the waveform buffer. This buffer must be block-aligned according to the nBlockAlign member of the WAVEFORMATEX structure used to open the device.

codice:
typedef struct {
  LPSTR lpData;
  DWORD dwBufferLength;
  DWORD dwBytesRecorded;
  DWORD dwUser;
  DWORD dwFlags;
  DWORD dwLoops;
  struct wavehdr_tag* lpNext;
  DWORD reserved;}
WAVEHDR;