Microsoft Visual studio Express 2015 for Windows desktop
を使ってプログラミングをしています。
次のプログラムを打って実行したのですが、次のようなエラーが起きて実行できません・・・どうすれば解決できるでしょうか。
/*プログラム*/
#include <windows.h>
#include <mmsystem.h>
int main(void) {
HMIDIOUT hMidiOut; /* MIDI 出力デバイスのハンドル */
midiOutOpen(&hMidiOut, MIDI_MAPPER, 0, 0, 0); /* MIDI 出力デバイスを開く */
midiOutShortMsg(hMidiOut, 0x007f3c90); /* 中央の C (C4) を強さ 127 で鳴らす */
Sleep(1000); /* 1000ms 間処理を中断 */
midiOutShortMsg(hMidiOut, 0x007f3c80); /* 中央の C (C4) の再生を止める */
midiOutReset(hMidiOut); /* 全チャンネルをノートオフ */
midiOutClose(hMidiOut); /* MIDI 出力デバイスを閉じる */
return 0;
}
/*エラー文*/
LNK1120 4件の未解決の外部参照
LNK2019 未解決の外部シンボル_imp_midiOutOpen@20が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutClose@4が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutShortMsg@8が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutReset@4が関数_mainで参照されました。
MIDIプログラミングやりたいんだが
Re: MIDIプログラミングやりたいんだが
後今の状況で考えられるのは
ライブラリの依存設定してないとか
ヘッダのインクルード忘れてるとかそんなノリ
関数の定義が見つかってないご様子
ライブラリの依存設定してないとか
ヘッダのインクルード忘れてるとかそんなノリ
関数の定義が見つかってないご様子
毎回ゲーム作ろうとするたびに壁にぶち当たる
Re: MIDIプログラミングやりたいんだが
返信ありがとうございます。
今一通りMIDIIOの設定を行ったのですが(ネット情報により)、
どうもうまくいきませんでした・・・相変わらずエラーだらけです(笑)
ライブラリの依存設定とは何でしょうか?
いろいろ初心者過ぎてわからない部分がたくさんです・・・ヘッダのインクルードは問題ないと思っていました。
今一通りMIDIIOの設定を行ったのですが(ネット情報により)、
どうもうまくいきませんでした・・・相変わらずエラーだらけです(笑)
ライブラリの依存設定とは何でしょうか?
いろいろ初心者過ぎてわからない部分がたくさんです・・・ヘッダのインクルードは問題ないと思っていました。
Re: MIDIプログラミングやりたいんだが
2015はよくわからないけど
2010以降はプロジェクトのプロパティから
VC++ディレクトリとかなんとかでライブラリファイル・インクルードファイルを設定出来た気がする
2010以降はプロジェクトのプロパティから
VC++ディレクトリとかなんとかでライブラリファイル・インクルードファイルを設定出来た気がする
毎回ゲーム作ろうとするたびに壁にぶち当たる
Re: MIDIプログラミングやりたいんだが
LNK2019は,MSDNライブラリにあるような状況の他,インポートライブラリをリンクしていない場合にも発生します。Kazuya さんが書きました:LNK2019 未解決の外部シンボル_imp_midiOutOpen@20が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutClose@4が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutShortMsg@8が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutReset@4が関数_mainで参照されました。
そして,例えばmidiOutOpen APIのMSDNライブラリの記述を見ると,
との表記があります。Requirements
Library Winmm.lib
これは,Winmm.libをリンクする必要がある,ということです。
オフトピック
その上のHeader欄にはMmsystem.h (include Windows.h)とあるため,Windows.hをインクルードしたなら明示的にMmsystem.hをインクルードする必要はない,ということもわかります。
他に,#pragmaディレクティブを使う方法 (コメント (C/C++)) があります。
単一ファイルの場合は,#pragma comment(lib, "winmm.lib")の方が楽だったりしますが,オブジェクトファイルが最終的にリンクされないと,
この#pragmaディレクティブも適用されないため,複数ファイルの場合は注意して使う必要があります。
Re: MIDIプログラミングやりたいんだが
YuOさん
細かいところまで説明して頂き感謝です!
YuOさんの言われたとおり、Winmm.libのリンクを試してみたいと思います、また解決できましたらお知らせいたします。
本当にありがとうございます。
細かいところまで説明して頂き感謝です!
YuOさんの言われたとおり、Winmm.libのリンクを試してみたいと思います、また解決できましたらお知らせいたします。
本当にありがとうございます。
Re: MIDIプログラミングやりたいんだが
Winmm.libのリンクを通してみました。
エラーがなくなった!・・・と思ったのですがまた2つエラーが発生してしまいました。次のようなエラーです(プログラム自体は最初と同じものを実行しています。)
LNK 1120 1件の未解決の外部参照
LNK 2019 未解決の外部シンボル_WinMain@16が関数"int__cdecl invoke_main(void)" (?
invoke_main@@YAHXZ)で参照されました。
エラーがなくなった!・・・と思ったのですがまた2つエラーが発生してしまいました。次のようなエラーです(プログラム自体は最初と同じものを実行しています。)
LNK 1120 1件の未解決の外部参照
LNK 2019 未解決の外部シンボル_WinMain@16が関数"int__cdecl invoke_main(void)" (?
invoke_main@@YAHXZ)で参照されました。
Re: MIDIプログラミングやりたいんだが
コンソールアプリケーションでないWindowsアプリケーションにおいて,エントリポイントは基本的にWinMain (またはwWinMain) であって,main (またはwmain) ではありません。Kazuya さんが書きました:LNK 2019 未解決の外部シンボル_WinMain@16が関数"int__cdecl invoke_main(void)" (?
invoke_main@@YAHXZ)で参照されました。
オフトピック
/ENTRYリンカオプションでエントリポイントは変更できますが,へたに変更するとCRT等の初期化すら行われないため,通常の用途では利用できません。
Re: MIDIプログラミングやりたいんだが
とんでもなく基本的な部分だったんですね(-_-;)
今までコンソールアプリケーションしか使ったことがなかったので、Windowsアプリケーションでの使い方としてとても勉強になりました!
結果、エラーが無くなり実行できました!!本当にありがとうございます!
今までコンソールアプリケーションしか使ったことがなかったので、Windowsアプリケーションでの使い方としてとても勉強になりました!
結果、エラーが無くなり実行できました!!本当にありがとうございます!