C++でのwaveInOut系における引数の型エラー
Q&A
Closed
発生しているエラー
GCCでコンパイルすると以下のようなエラーが吐かれます。
error: cast from 'HWND' {aka 'HWND__*'} to 'DWORD' {aka 'long unsigned int'} loses precision [-fpermissive]
waveInOpen(&hWaveIn,inDevNum,&wfe,(DWORD)hwnd,0,CALLBACK_WINDOW);
^~~~~~~~~~~
言ってることはわかるんですがどうしてなのか……
前後しますが問題のコードはこちらです。
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
//割愛
//waveInOpen関数の第二引数はコンボボックスでセレクトされた値が入ります。
if(waveInOpen(&hWaveIn,inDevNum,&wfe,(DWORD)hwnd,0,CALLBACK_WINDOW)==MMSYSERR_NOERROR){
waveInPrepareHeader(hWaveIn,&whdr,sizeof(whdr));
waveInReset(hWaveIn);
waveInAddBuffer(hWaveIn,&whdr,sizeof(whdr));
waveInStart(hWaveIn);
}
//割愛
}
ウィンドウプロシージャで、入力された値の入力デバイスを選択して開く、という感じです。
waveInOpen関数の第四引数の型変換が出来てないということなんでしょうけれど、どうも調べる限りどのサイトもこの書き方をしており、どこが違うのかがわからず困っています。
書き間違いか、あるいはGCCの問題なのか……。
根本的な間違いをしている可能性もあり、どこをどう調べればいいのかもよくわかっていない感じです。
何卒皆様のお知恵を拝借できればと思います。よろしくお願いします。