重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

rc = waveInPrepareHeader(hwi,lpwh,sizeof(WAVEHDR));
のあと、「無効なパラメータがシステム機能に渡されました」となってしまいます。
ちなみに返ってきている値は「11」で、
どのエラーにもあてはまらないようです。
いったい何が原因なのか、
そして、どうすればいいのかがさっぱりわからず、困っています。
誰か教えてください‥‥‥。
デバイスのオープンは出来ている感じです‥‥。

変数の宣言(?)はプログラムの最初に、以下のように設定しています。
WAVEHDR wh;
HWAVEIN hwi;
HWND hWnd;
WAVEFORMATEX wfx;
MMRESULT rc;
LPWAVEHDR lpwh;

もし、必要な情報が不足しているならいって下さい。
質問の意味がわからない、とか‥‥‥。

A 回答 (2件)

ずいぶん時間がたっていますが、もう解決されたでしょうか?



実際に使ったことはないのですが、ドキュメント&サンプルをみた範囲で。

エラーは MMSYSERR_INVALPARAM(11)でパラメータエラーです。


怪しそうなのは
 >デバイスのオープンは出来ている感じです。
 ということですが、waveInOpen()は成功していますか。
 
 DATABLOCK_SIZEっていくつでしょう。


VC++のヘルプで waveInPrepareHeader を調べると
 DIALOGS.C (コード)
 DDREC.EXE (ダウンロード先)
があるので参考までに。

この回答への補足

相変わらず返事が遅くてすいません。

まだ解決していないのでまた補足させていただきます。

waveInOpen()は成功しているようです。
そのすぐあとにつけているprintf()が働いているので‥‥。

DATABLOCK_SIZEは327680Lです。
参考にしたプログラムにのっていた値そのままです(苦笑)。

ところで、VC++のヘルプとは、
マイクロソフトのHP上にあるのでしょうか?
それともVC++のヘルプキーからでしょうか?
どうもDIALOGS.Cとかは見当たらないのですが‥‥。

補足日時:2001/09/13 11:03
    • good
    • 0

まったく WAVE 関連はやったことが無いのですが、質問の範囲から


ありそうな間違いを。

> WAVEHDR wh;
> LPWAVEHDR lpwh;
> rc = waveInPrepareHeader(hwi,lpwh,sizeof(WAVEHDR));

lpwh = &wh;
rc = waveInPrepareHeader(hwi,lpwh,sizeof(WAVEHDR));

ってやってますか?

後、他の API でもよくありがちな話として、

・WAVEHDR は、0でクリアしておく
・WAVEHDR がバージョンのような数字をメンバに持っていて、それが不当
・WAVEHDR のメンバで領域を割り当てておくようなところがあって、それをやってない

なんてところを思いつきますが。

# WAVE 未経験ですが、一応、計算機屋の端くれなので「専門家」にチェックを入れてます

この回答への補足

返事が遅くなりましてもうしわけありません。

lpwh=&wh;
は、やっていませんでした。
でも、追加して実行しても結果は変わりませんでした‥‥。

WAVEHDRは0でクリアしてあります。

>・WAVEHDR がバージョンのような数字をメンバに持っていて、それが不当
>・WAVEHDR のメンバで領域を割り当てておくようなところがあって、それをやってない

の2点に関しては‥‥‥意味がよくわかりません‥‥。

ZeroMemory(&wh,sizeof(WAVEHDR));
wh.lpData = (char *)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,DATABLOCK_SIZE);
wh.dwBufferLength = DATABLOCK_SIZE;

ということはやっているのですが、これでは不十分でしょうか‥‥?

補足日時:2001/09/04 10:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!