J'ai comme l'impression que tu ne comprends pas vraiment ce que tu fais...
> hMem(i) = GlobalAlloc(&H40, BUFFER_SIZE);
tu alloues une zone de mémoire, qui va recevoir les données
> inHdr(i).lpData = GlobalLock(hMem(i))
dans la structure de type WAVEHDR, tu remplis le champs lpData avec l'adresse du buffer que tu viens d'allouer.
Au passage, l'utilisation des fonctions archi windowsiennes du type 'GlobalLock' me font ... sourire. Je trouve ça nul, mais là c'est un autre débat.
La doc (MSDN) te dis: "The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block."
Donc heureusement
que la variable hMem(i) et la variable inHdr(i).lpData ont la même valeure!
quand windows te rends le buffer, soit par callback soit par message (selon la méthode que tu utilises), alors le buffer pointé par inHdr(i).lpData contient les données.
Si tu veux travailler sur les données, il faut donc travailler sur le buffer en question, qui doit avoir une longeur valide de inHdr(i).dwBytesRecorded octets.
en C (désolé, je ne connais pas le VB), on ferait donc:
fwrite( (void *)inHdr(i).lpData, inHdr(i).dwBytesRecorded, 1, fp );
J'espère avoir été clair.