VC++6で使っています。
コンパイル・リンクは通るものの、
いざ実行すると
memcpy( ((char*)pPlaybackBuffer+nPlaybackBufferPos), lpwh->lpData,
lpwh->dwBytesRecorded);
と言うとこころで
ハンドルされていない例外がXXX.EXEの所にあります。0xc0000005。
アクセス・バイオレーション。”
なるエラーが出て、止まります。
どう言うところをチェックしたら、いいでしょうか?
・(char *)pPlaybackBuffer + nPlaybackBufferPos
・lpwh
・lpwh->lpData
・(char *)pPlaybackBuffer + nPlaybackBufferPos + lpwh->dwBytesRecorded - 1
・(char *)lpwh->lpData + lpwh->dwBytesRecorded - 1
などが有効なオブジェクトを指していないんじゃないですか?
とりあえずは,Access Violationが発生したときのコールスタックをたどって,
上に示した値が正しいかどうかをチェックしてみることです。
簡単な理屈で確保していないメモリは使えません。
例えば、10バイト確保したのに11バイト目を見ようとすれば、
当然、Access Violationになります。
memcpyで使っているポインタが指し示す先等、
確保していないようなところまで見ている場合は、NGです。
また、ポインタそのものに確保されたメモリのアドレスが
ちゃんと入っていることが前提条件です。
単にポインタを変数宣言しただけで使おうとしていたりすると
大体の話、アウトになります。
デバッガで、
lpwh
pPlaybackBuffer
の指す実態の状況を見ることができます。
pPlaybackBuffer + nPlaybackBufferPos
も見れます。
もう解決出来てるかと思うのですが、
落ちる所が分かったらとりあえず落ちる前に
ブレークポイントを設定して変数を確認しましょう。