MIDIプログラミングやりたいんだが

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Kazuya
記事: 5
登録日時: 4年前

MIDIプログラミングやりたいんだが

#1

投稿記事 by Kazuya » 4年前

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で参照されました。

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: MIDIプログラミングやりたいんだが

#2

投稿記事 by 夢幻ノ月夜 » 4年前

MIDIIOっていうライブラリ使うとスゲェ楽
ライブラリにこだわりがないならオススメする
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: MIDIプログラミングやりたいんだが

#3

投稿記事 by 夢幻ノ月夜 » 4年前

後今の状況で考えられるのは
ライブラリの依存設定してないとか
ヘッダのインクルード忘れてるとかそんなノリ
関数の定義が見つかってないご様子
毎回ゲーム作ろうとするたびに壁にぶち当たる

Kazuya
記事: 5
登録日時: 4年前

Re: MIDIプログラミングやりたいんだが

#4

投稿記事 by Kazuya » 4年前

返信ありがとうございます。

今一通りMIDIIOの設定を行ったのですが(ネット情報により)、
どうもうまくいきませんでした・・・相変わらずエラーだらけです(笑)
ライブラリの依存設定とは何でしょうか?
いろいろ初心者過ぎてわからない部分がたくさんです・・・ヘッダのインクルードは問題ないと思っていました。

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: MIDIプログラミングやりたいんだが

#5

投稿記事 by 夢幻ノ月夜 » 4年前

2015はよくわからないけど
2010以降はプロジェクトのプロパティから
VC++ディレクトリとかなんとかでライブラリファイル・インクルードファイルを設定出来た気がする
毎回ゲーム作ろうとするたびに壁にぶち当たる

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: MIDIプログラミングやりたいんだが

#6

投稿記事 by YuO » 4年前

Kazuya さんが書きました:LNK2019 未解決の外部シンボル_imp_midiOutOpen@20が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutClose@4が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutShortMsg@8が関数_mainで参照されました。
LNK2019 未解決の外部シンボル_imp_midiOutReset@4が関数_mainで参照されました。
LNK2019は,MSDNライブラリにあるような状況の他,インポートライブラリをリンクしていない場合にも発生します。
そして,例えばmidiOutOpen APIのMSDNライブラリの記述を見ると,
Requirements
Library Winmm.lib
との表記があります。
これは,Winmm.libをリンクする必要がある,ということです。
オフトピック
その上のHeader欄にはMmsystem.h (include Windows.h)とあるため,Windows.hをインクルードしたなら明示的にMmsystem.hをインクルードする必要はない,ということもわかります。
さて,VC++2015におけるライブラリのリンクの方法ですが,リンカー入力としての .lib ファイルに記述があります。
他に,#pragmaディレクティブを使う方法 (コメント (C/C++)) があります。
単一ファイルの場合は,#pragma comment(lib, "winmm.lib")の方が楽だったりしますが,オブジェクトファイルが最終的にリンクされないと,
この#pragmaディレクティブも適用されないため,複数ファイルの場合は注意して使う必要があります。

Kazuya
記事: 5
登録日時: 4年前

Re: MIDIプログラミングやりたいんだが

#7

投稿記事 by Kazuya » 4年前

YuOさん
細かいところまで説明して頂き感謝です!
YuOさんの言われたとおり、Winmm.libのリンクを試してみたいと思います、また解決できましたらお知らせいたします。
本当にありがとうございます。

Kazuya
記事: 5
登録日時: 4年前

Re: MIDIプログラミングやりたいんだが

#8

投稿記事 by Kazuya » 4年前

Winmm.libのリンクを通してみました。
エラーがなくなった!・・・と思ったのですがまた2つエラーが発生してしまいました。次のようなエラーです(プログラム自体は最初と同じものを実行しています。)

LNK 1120 1件の未解決の外部参照
LNK 2019 未解決の外部シンボル_WinMain@16が関数"int__cdecl invoke_main(void)" (?
invoke_main@@YAHXZ)で参照されました。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: MIDIプログラミングやりたいんだが

#9

投稿記事 by YuO » 4年前

Kazuya さんが書きました:LNK 2019 未解決の外部シンボル_WinMain@16が関数"int__cdecl invoke_main(void)" (?
invoke_main@@YAHXZ)で参照されました。
コンソールアプリケーションでないWindowsアプリケーションにおいて,エントリポイントは基本的にWinMain (またはwWinMain) であって,main (またはwmain) ではありません。
オフトピック
/ENTRYリンカオプションでエントリポイントは変更できますが,へたに変更するとCRT等の初期化すら行われないため,通常の用途では利用できません。
コンソールアプリケーションでないWindowsアプリケーションでは,

コード:

int main (void)
ではなく,

コード:

int CALLBACK WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
から始めるようにしてください。

Kazuya
記事: 5
登録日時: 4年前

Re: MIDIプログラミングやりたいんだが

#10

投稿記事 by Kazuya » 4年前

とんでもなく基本的な部分だったんですね(-_-;)
今までコンソールアプリケーションしか使ったことがなかったので、Windowsアプリケーションでの使い方としてとても勉強になりました!

結果、エラーが無くなり実行できました!!本当にありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る