mciSendCommandあたりが、認識されない – プログラミング – Home

mciSendCommandあたりが、...
 
通知
すべてクリア

mciSendCommandあたりが、認識されない


たき
 たき
(@たき)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

Windows7の下、
Visual Studio 2005 VC++
で使用しています。
ファイルを開いたり、
そこに録音したりするのに、
下記のように、
MCI命令を使っています。
mciSendCommand(0 , MCI_OPEN ,
MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |
MCI_OPEN_ELEMENT , (DWORD)&mop);

mciSendCommand(mop.wDeviceID , MCI_RECORD , 0 , 0);

ところが、コンパイルする時に、
下記のように、リンク時に、
それらの命令が_WndProc@1下のコードでは、
見つからないとするような
エラーが出ました。
何が悪いのでしょうか?
何か、リンクするとか、そういう作業が必要なのでしょうか?
教えていただけると、ありがたいです。
よろしくお願いします。

1>リソースをコンパイルしています...
1>マニフェストをリソースにコンパイルしています...
1>リンクしています...
1>Rec.obj : error LNK2019: 未解決の外部シンボル __imp__mciGetErrorStringA@12 が
関数 _WndProc@16 で参照されました。
1>Rec.obj : error LNK2019: 未解決の外部シンボル __imp__mciSendCommandA@16 が関
数 _WndProc@16 で参照されました。
1>Debug\Real_Vowel_Rec.exe : fatal error LNK1120: 外部参照 2 が未解決です。
1>ビルドログは file://c:\Real_Vowel_Rec\Debug\BuildLog.htm に保存されました。
1>Real_Vowel_Rec - エラー 3、警告 10
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========


引用解決済
トピックタグ
しま
 しま
(@しま)
ゲスト
結合: 18年前
投稿: 123
 

>1>リンクしています...
>1>Rec.obj : error LNK2019: 未解決の外部シンボル __imp__mciGetErrorStringA@12

>関数 _WndProc@16 で参照されました。
>1>Rec.obj : error LNK2019: 未解決の外部シンボル __imp__mciSendCommandA@16 が関
数 _WndProc@16 で参照されました。
>1>Debug\Real_Vowel_Rec.exe : fatal error LNK1120: 外部参照 2 が未解決です。

これは、リンク時のエラーメッセージですから、リンカーに対するリンク対象の
指定が足りないためにリンカーが探しきれなかったと報告しているのでしょう。
リンクすべきライブラリーかインポートの指示かを見直してみてください


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

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

下の方に「インポートライブラリ」として、リンクに必要なライブラリが書かれています。
リンカで指定していますか?
# 標準では指定されていないと思いますが…。

リンカではなく、pragmaで指定してもいいんですけどね。
#pragma comment(lib, winmm.lib)
のように。


返信引用
たき
 たき
(@たき)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

皆さん
いろいろと、
ご教示、
ありがとうございます。

でも、
#include <mmsystem.h>
した直後に、
今しがた、
#pragma comment(lib, winmm.lib)
を入れてみたのですが、
やはり、コンパイルは通れど、
mci命令で引っかかるという
状況は変わりませんでした。
mmsystemのスペルをMmsystem
にしてみたり、
winmmを
Winmm
にしてみたりもしましたが、
前と同じでした。
(プロジェクトは、Windowsのモードで作っています)
winmm以外に、
他にリンクすべきものがあるのでしょうか?

また、ちなみに、プログラムの中以外で、
VS++2005 c/c++
では、どこに、winmmをリンクすべきメニューがあるのでしょうか?


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>やはり、コンパイルは通れど、
>mci命令で引っかかるという
>状況は変わりませんでした。

エラーメッセージは変わらない…ということですか?
まさかSDKへのパスが通っていない…というワケではないと思いますけど……。
# 確認方法は後述。
「リビルド」でまっさらからコンパイルし直してみる…とか。(とは言え、ソース書き換え
た時点でコンパイル対象になっているハズですけどねぇ…)

>また、ちなみに、プログラムの中以外で、
>VS++2005 c/c++
>では、どこに、winmmをリンクすべきメニューがあるのでしょうか?

自宅帰らないと2005がないのですが…とりあえず2008で。
# それほど違いは無かった…ハズ。
なお、設定は「上級者」設定前提となります。

まずはライブラリパスの確認。
[ツール][オプション]でオプションの画面を開いて、
左側のツリービューで[プロジェクトおよびソリューション][VC++ ディレクトリ]と進み
ます。
プラットフォームは「Win32」のまま、ディレクトリを表示するプロジェクトで「ライブ
ラリ ファイル」を選択。
下の一覧に「$(WindowsSdkDir)\lib」ってのは入っていますか?
入っていないとWindowsSDKのインストールが正しくない可能性があります。
# まぁ、それだと…コンパイルの時点でエラーになると思うんですけどねぇ…。

んで、個別のライブラリファイルの指定。
[プロジェクト][~のプロパティ]でプロジェクトのプロパティページが開きます。
「構成」から「Debug」か「Release」を選択して、下のツリービューから
[構成プロパティ][リンカ][入力]と進みます。
右側に「追加の依存ファイル」という欄があるので、クリックしてアクティブにすると右
の方に[...]ってボタンが出ます。
[...]のボタンを押すと新しくウィンドウが開くので、上のエディットボックスに
winmm.libと入力してください。
既に何か入力されている場合は改行して下に追加し、[OK]ボタンで閉じます。
プロジェクトのプロパティページも[OK]で閉じてください。

で……この設定はDebugとReleaseで別々に設定されるのでもう片方への設定も忘れずに。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

追試しました。VS2008ですが、

#include <mmsystem.h>
#pragma comment(lib, winmm.lib)
void foo()
{
LPMCI_OPEN_PARMS OpenPrm;
MCIERROR err = mciSendCommandA( // (Wも)
NULL,
MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT, ( DWORD)
&OpenPrm);
}

でリンクエラーは出ませんでした。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>マニフェストをリソースにコンパイルしています...
これ大丈夫でしたっけ?
バージョン違いがあったように思えます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました