VS2005のC++のWindowsのモードで
ビルドをかけました。
リンク時に下記のエラーが出ました。
何が悪いのでしょうか?
1>Rec_v.obj : error LNK2019: 未解決の外部シンボル __imp__mciGetErrorStringA@12
が関数 _WndProc@16 で参照されました。
1>Rec_v.obj : error LNK2019: 未解決の外部シンボル __imp__PlaySoundA@12 が関数
_WndProc@16 で参照されました。
1>Rec_v.obj : error LNK2019: 未解決の外部シンボル __imp__mciSendCommandA@16 が
関数 _WndProc@16 で参照されました。
「インポートライブラリ:Winmm.lib を使用」
なので、Winmm.libをリンクする必要があると思います。
ロマさん
さっそくのご回答、ありがとうございます。
しかし、
うーん。
それも、下記のようにやっているのですが。
#include <MMSystem.h>
#pragma comment(lib, Winmm.lib)
そういう現象に遭遇したことはありませんが…
http://blog.livedoor.jp/blackwingcat/archives/1114627.html
なんて例もあるようです。
あと……ライブラリファイル名は"で括らなくていいんですかね?
# 手元のVS2005Stdでは括らないとリンクエラーでしたが。
皆さん。わかりました。わかりました。
コンパイルは通るものの、
#pragma comment(lib, winmm.lib)
とすべきところを、
#pragma comment(lib, winmm.lib)
と言うように、ダブルクオーテーションを
省かせると、
リンクのところで、
PlaySoundやmci命令を認識しないようでした。
Borland C++あたりでは通っていますが、
Visual StudioのC++バージョンあたりだと
だめなようです。
しかし、
その先、走らせて問題が発生しました。
録音命令のところですが、
順調に録音していたように見えて、
いざ、録音終了させようと思うと、
録音終了ボタンを押し、ID_REC_END
に入って来たとたん、
case ID_REC_END: // Recording Termination Routine
msp.dwCallback = (DWORD)hWnd;
msp.lpfilename = strFile;
mciSendCommand(mop.wDeviceID , MCI_STOP , MCI_WAIT , 0);
mciSendCommand(mop.wDeviceID , MCI_SAVE ,
MCI_WAIT | MCI_SAVE_FILE , (DWORD)&msp);
EnableWindow(GetDlgItem(hWnd , ID_REC) , TRUE);
EnableWindow(GetDlgItem(hWnd , ID_REC_END) , FALSE);
の中の4番目の命令、
mciSendCommand(mop.wDeviceID , MCI_SAVE ,
MCI_WAIT | MCI_SAVE_FILE , (DWORD)&msp);
で、下記の警告を出して、ハング、
Real_5Vowel_Rec.exe の 0x7306bb5e でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
で、中断、これ以上動かず、
実際には、.wavファイルに、録音データの
書き込みは失敗したようです。
ここは、どこがおかしいと考えればいいでしょうか。
この命令も、Borland C++では動いているのですが、
Visual Studio 2005に持って来た、とたんfailしましたのです。
再度、お騒がせしまして、申し訳ありません。
デバッグは自分でやって欲しいところですがね……
mopとmspは何者です?
寿命とか問題ないんでしょうね?
というか、現象を確認できる最低限のソースを掲示した方が早そうですが。