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

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAからクエリのパラメータを設定したいです。

いつもお世話になっております。

クエリーは全く同じ内容ですが、
複数のフォームにパラメータを入力するユーザーインターフェースのため、ク
エリーを複数用意して、それぞれに
[forms]![F_TEST]![テキスト名]というパラメータを設定し、フォームの帳票やレポートの帳票に出力していま
した。

このクエリを一本にして、VBAから動的にパラメータを参照するフォームを指定
できないでしょうか?

よろしくお願いいたします。

Aベストアンサー

再びmaruru01です。
既存のクエリもVBAのSQLステートメント化をお奨めします。
それを標準モジュールに、

Public Sub myRunSQL(Para As String)

  Dim SQL As String

  SQL = "(SQL文の前の方)" & Para & "(SQL文の後ろの方)"
  DoCmd.RunSQL SQL

End Sub

という風にそれぞれのクエリを各プロシージャにしておけば、どこからでも呼び出せるわけです。
すでに作ってあるクエリを書き直すのは面倒ですが、一度書いてしまえばあとは楽です。
また、まったく同じじゃないんだけど結構似てるというクエリは、プロシージャをコピーして名前と中身をかえてやればすぐ出来るわけです。
ちなみに私は、基本的には、クエリもマクロも使用せず、すべてVBAで書いています。
では。

Qsizeof(long), sizeof(short)   (処理系依存と言うけれど・・・)

 
数値(整数)型の定義サイズについて、質問です。

ANSIの規格では、

sizeof(short) ≦ sizeof(int) ≦ sizeof(long)

としか定義されていないので、実際にこれらの型が取る大きさは処理系依存だ、と聞きます。
しかし、VC++、BCCなど、知名度の高いコンパイラでは、いずれも、

sizeof(short) → 2
sizeof(int) → 2
sizeof(long) → 4

となっているようです。(手元にないので、gccでは確認していませんが・・・)
実際のところ、上記のサイズにならない処理系は実在するのでしょうか?

何故こんな質問をするのかというと、あるテキスト(事情があって、書名等の情報は出せないのですが)に

> 次の sizeof 演算子の返す値として正しいものはどれですか。
>
> long hoge[32];
> sizeof(hoge);
> ------------------------------------------------------
> A. 32
> B. 64
> C. 128
> D. 256
> E. 512

という問題が掲載されており、解説が、

> 正解は C 。
>
> long 型は 4 バイトで構成されるので、32 個の要素がある配列では、 128 バイトになります。

となっていたのです。(short型のサイズを問う類題あり)
特定の処理系が前提条件とされていないので、適切な設問、解説とは思えないのですが、誤りと断言できるほどの自信がないため、作者に指摘すべきか否か、迷っています。
sizeof(short) → 2、sizeof(long) → 4 にならない処理系が実在しなければ、規格の定義上は正しくなくても、実務上は誤りとは言えないような気もしますが、どうでしょうか?
コメントをお待ちしております。
 

 
数値(整数)型の定義サイズについて、質問です。

ANSIの規格では、

sizeof(short) ≦ sizeof(int) ≦ sizeof(long)

としか定義されていないので、実際にこれらの型が取る大きさは処理系依存だ、と聞きます。
しかし、VC++、BCCなど、知名度の高いコンパイラでは、いずれも、

sizeof(short) → 2
sizeof(int) → 2
sizeof(long) → 4

となっているようです。(手元にないので、gccでは確認していませんが・・・)
実際のところ、上記のサイズにならない処理系は実在するのでしょうか?

何故...続きを読む

Aベストアンサー

64ビットマシン向けの商用UNIXのほとんどでは、
sizeof(long)は 8
となっているはずです。(LP64モデルを採用)

ちなみに、
Win64では 4 のままです。(LLP64モデルを採用)

さらに重箱の隅をつつくようで申し訳ないですが、IA32向けのVC++や、BCCでは、sizeof(int)は 2 ではなく 4 を返しますね。ご確認を。

参考まで。

QAccessの演算フィールドでのパラメータ設定について教えて下さい

Accessについて質問です。クエリで「金額:[価格]*[数量]」などの演算フィールドで、パラメータを使って抽出しようと「>=[金額を入れる]」のような条件を設定しました。すると、パラメータに10000と入力すると、10000以上のものが抽出はされますが、1000以上のものまで抽出されてしまいます。どうも先頭の数字に反応しているようです。どういうことなのでしょうか?どなたかよろしくお願いします。

Aベストアンサー

>価格フィールドは通貨型、数量フィールドは数値型なのです
で、演算は掛け算だけですか?
関数を使っていたりすると戻される型が変わってしまうということもありますよ

式のほうは数値型で間違いなければ
パラメータのデータ型を指定してやってください

クエリデザインビューなら[クエリ][パラメータ]で
パラメータのデータ型指定ができます

Qint i,j; \n i=0,j=5;

int i,j;
i=0;
j=5:
と書いてあるソースは普通ですが、
int i,j;
i=0,j=5:
と書いてあるソースもあります。
後者はC++の正しい書式ですか?

カンマ演算子というのは後者のカンマのことですか?

Aベストアンサー

 正しい書式です。

i=0,j=5;
 における、「,」をカンマ演算子といいます。2項の演算子です。カンマで区切られた演算を「左から順番に」実行し、最後の演算を結果として返します。
 したがって、例の文であれば、i=0を実行し、次にj=5を実行。そして、j=5の結果の5を結果として返します。
 ・・・
 が、本来的には、あまり、例のような使い方はしませんね。よく見られるのは、次のような場合です。

 for (i=0,j=0 ; i < 50 ; ++i,++j) {

 のような形でよく見られます。for文の各式は、一つの式でなければならないので、こんな書き方をするわけです。初期化と更新部が一つにまとまり、ループが読みやすくなるのが利点かな。

Qパラメータの入力ダイアログボックスに入力規則を設定したいのですが。

WinXP,Access2002使用しています。
入力された日付以前のデータを抽出するパラメータクエリを作りました。このパラメータの入力ダイアログボックスに年月日を入力する際、「2007/02/06」と入力するのは面倒なので、(効率化のため)「070206」と入力して「2007/02/06」となるように入力規則を設定したいんです。
パラメータの入力ダイアログボックスに入力規則を設定する方法をおしえてください!!!よろしくおねがいします!!!

Aベストアンサー

そのような機能はありません
やりたければ自分で入力用のフォームを作るしかありません

そもそも
>「2007/02/06」と入力するのは面倒なので、(効率化のため)
>「070206」と入力して「2007/02/06」となるように
初心者からよくでる質問ですが、こんなところに力を注ぐのは
あまり意味のないことですね

西暦を2桁で表すのも余計なトラブルを生み出す元ですよ

QSendMessage(hW,WM_CREATE,0,0);を

SendMessage(hW,WM_CREATE,0,0);
を実行するとシステムがWM_DOWNやWM_CHARを発行しなくなるみたいです
というのはそれ以降キー入力を無視するようになるのです
いったんアプリをアイコン化してウィンドウ化するとWM_DOWNやWM_CHARを発行するようになります
WM_CREATEを送ってもWM_DOWNやWM_CHARを発行しなくなるのを阻止するために何か方法はないでしょうか?

Aベストアンサー

>プログラムのイニシャライズのために送ったのですが送らないで住むプログラムに変更しました

普通はそんな方法はとりません。
システムが何をするか分からないからです。

自分でメッセージを定義して、初期化処理を行うようするためのメッセージを送るほうが無難です。
WM_CREATEと同じ処理を初期化処理として行わせたいのであれば、初期化処理を関数化して自分で定義したメッセージでも呼び出せばいいのですし。


>作ったプッシュボタンを押してシステムがWM_COMMANDを送ってきた後キー関係のメッセージを送ってくれなくなります

プッシュボタンがキーボードフォーカスを持ってのるでは?

ボタンがキーボードフォーカスを持っていてもキー関連のメッセージを親ウィンドウが受け取りたいのであれば、サブクラス化をするしかないでしょう。

QAccess2000で、パラメータの設定をしたときに。

ACCESS2000を勉強しています。
クエリを作成したときにパラメータの設定をして、たびたびの抽出を簡易にしようというところまできたのですが、疑問が出てきました。

パラメータの入力を求めるダイアログボックスが出てきたときに、そのダイアログボックスに入力する値の制限や、書式の限定をすることはできるのでしょうか?
もし、できるのならどうすればいいのでしょうか?
自分だけが入力するわけではない場合、入力値が制限外のものの場合、alertメッセージが出てくるようなカンジにしてみたいのですが。。。

ご存知でしたら教えて下さい。

Aベストアンサー

パラメータクエリーでは入力規則制限・メッセージはできないと思います。

ご自身しか使わない場合は、クエリーのパラメーターを使う方法でもいいかと思いますが、他の方も使う場合はフォームで条件を入力させてその値を抽出条件にした方がフォーム上で入力規則のチェックも出来ますし、
操作ミスが少ないのでいいと思いますよ。

クエリーの抽出条件で=Forms![F_条件指定]![条件1]
などと記述するだけです。

Q1,1,2,3,5,8,13の合計

初心者ですみませんが、1,1,2,3,5,8,13の合計を出すプログラミングがどうしてもわかりません。どなたかご教示頂けましたら助かります。
宜しくお願いいたします。

Aベストアンサー

#include <stdio.h>

int main(void)
{
   printf("%d\n", 1+1+2+3+5+8+13);
}

QReportViewerでのパラメータ設定

ReportViewer を使用して、SQL Server Reporting Service
のReportsを、Webフォーム上に表示しようとしています。
サーバーレポートとして構築したReportsは、レポート
パラメータ(内部)があるため、Webフォーム上で指定
された値を、パラメータとして渡す必要があります。

MSDNのサイトには以下のような記述があり、パラメー
タを渡すことは可能なようなのですが、具体的な記述
方法の記載がなく困っています。

================================================
レポート パラメータの組み込みサポートにより、静的
な値に基づく結果セットの条件付き書式とフィルタの機
能が提供されます。

クエリ パラメータやレポート パラメータに対するユー
ザーからの入力を実行時に受け取るには、アプリケーシ
ョンでそれをサポートするためのコードを記述する必要
があります。

http://msdn.microsoft.com/ja-jp/library/ms345248.aspx

================================================

実現されている方がお見えになったら、ご教授願えない
でしょうか?

ReportViewer を使用して、SQL Server Reporting Service
のReportsを、Webフォーム上に表示しようとしています。
サーバーレポートとして構築したReportsは、レポート
パラメータ(内部)があるため、Webフォーム上で指定
された値を、パラメータとして渡す必要があります。

MSDNのサイトには以下のような記述があり、パラメー
タを渡すことは可能なようなのですが、具体的な記述
方法の記載がなく困っています。

================================================
レポート パラメータの組み込み...続きを読む

Aベストアンサー

難しくはないです。まあ、コードを見た方が早いですよね。
問題はおきてないです。

Dim parm As New Generic.List(Of ReportParameter)
parm.Add(New ReportParameter("パラメータ名", "パラメータ値", False))
parm.Add(New ReportParameter("パラメータ名", "パラメータ値", False))

With myReportViewer
.ServerReport.ReportServerUrl=(サーバURI)
.ShowParameterPrompts = False
.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote
.ServerReport.ReportPath = "レポートパス"
.ServerReport.SetParameters(parm)
End With

Qfor( ; ti >= 0; ti--, ci++)

C言語のループの表記のことです

for ( ; ti >= 0; ti- -, ci++)
この意味がわかりません
自分なりに解釈すると「;ti >= 0」から始まって「 ci++ 」を繰り返しながら「 ti- - 」になるまで繰り返す、というような感じです

「;ti >= 0」から始まるとはどういう意味でしょうか?
「 ti- - 」になるまでとは???

このソースが書かれているHPです
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H12a2/pm11.html
52行目になります


わかる方がいらっしゃったら教えてください、お願いします

Aベストアンサー

for() の 「初期設定式」「継続条件式」「再設定式」の区切りは、; です。
ですからこの場合、
初期設定式:なにもない(特に初期設定不要)
継続条件式: ti >= 0
再設定式: ti--, ci++
です。

さらに、再設定式に出てくる表現は、「コンマ演算子」といいまして、おおざっぱに言えば、コンマで区切られた式を順番に実行という意味です。
(関数の引数に現れるコンマとは別の意味です)

初期設定式のない for() は、すでにあるところから処理を継続する場合によく使われます。たとえば、

s = 0;
for (i = 0; x[i] == 0; i++); // x[i] の先頭部分の0の要素を捨てて
for(; x[i] > 0; i++)
s += x[i]; // 「そのあと」の正の部分が継続する間足し込む
という場合、

また、再設定式は、

for(i = 0, j = 10; src[i] != 0; i++, j--)
dest[j] = src[i];
のように、二つ(以上)のものを変化させたい場合。
この例では、初期設定式も、コンマ演算子を使って、2つの初期化を行っています。

for() の 「初期設定式」「継続条件式」「再設定式」の区切りは、; です。
ですからこの場合、
初期設定式:なにもない(特に初期設定不要)
継続条件式: ti >= 0
再設定式: ti--, ci++
です。

さらに、再設定式に出てくる表現は、「コンマ演算子」といいまして、おおざっぱに言えば、コンマで区切られた式を順番に実行という意味です。
(関数の引数に現れるコンマとは別の意味です)

初期設定式のない for() は、すでにあるところから処理を継続する場合によく使われます。たとえば、

s = 0;
...続きを読む


人気Q&Aランキング