mci系の命令やPlaySoundが通らない。

[戻る]
たけ 2014/01/04(土) 14:50:25
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 で参照されました。

ロマ 2014/01/04(土) 15:52:56
「インポートライブラリ:Winmm.lib を使用」

なので、Winmm.libをリンクする必要があると思います。

たけ 2014/01/04(土) 16:15:44
ロマさん

さっそくのご回答、ありがとうございます。
しかし、
うーん。
それも、下記のようにやっているのですが。

#include <MMSystem.h>
#pragma comment(lib, Winmm.lib)

瀬戸っぷ [E-Mail] 2014/01/04(土) 23:30:55
そういう現象に遭遇したことはありませんが…

http://blog.livedoor.jp/blackwingcat/archives/1114627.html

なんて例もあるようです。

あと……ライブラリファイル名は""で括らなくていいんですかね?
# 手元のVS2005Stdでは括らないとリンクエラーでしたが。

・ス・ス・ス・ス 2014/01/05(日) 17:36:57
皆さん。わかりました。わかりました。
コンパイルは通るものの、
#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しましたのです。
再度、お騒がせしまして、申し訳ありません。

瀬戸っぷ [E-Mail] 2014/01/05(日) 22:03:59
デバッグは自分でやって欲しいところですがね……

mopとmspは何者です?
寿命とか問題ないんでしょうね?
というか、現象を確認できる最低限のソースを掲示した方が早そうですが。

古いスレッドには追加発言できません。