0からのゲームプログラミング > Windows API

Back Next
更新日 2003.09.28
Windows API

 Windows API (Application Programming Interface)とは、OS(Windows) がアプリケーション(メモ帳やこれから作成するゲーム等)に提供する関数セットのことです。昔の16ビット環境用や現在主に使われている32ビット環境用があります。32ビット環境用のAPIのことを、Win32 API と呼びます。Windows でプログラムを作成していくときには、この Win32 API を使っていきます。

 Win32 API は、Windows Application (ウィンドウズ・アプリケーション) を作成するときに使われるだけでなく、今まで作ってきた Console Application (コンソール・アプリケーション) でも使うことが出来ます。今回は、試しにコンソール・アプリケーションで、Win32 API を使ってみましょう。


 以下のコードは、ビープ音を鳴らすサンプルです。実行すると、ビープ音が鳴りますので、ビックリしないようにして下さい。

サンプルコード

#include	<windows.h>

void main(void)
{
	::Beep(3000, 1000);
}


 Beep という関数は、スピーカからビープ音を鳴らします。この Beep 関数は、数ある Windows API の中の一つです。

Beep 関数のプロトタイプ

BOOL Beep(
  DWORD dwFreq,     // ビープ音の周波数
  DWORD dwDuration  // ビープ音の持続時間
);

第1引数 : 音の周波数。37(0x25)から 32,767(0x7FFF)までの値をヘルツ(Hz)単位で指定。
第2引数 : 音の持続時間をミリ秒(ms)単位で指定。
戻り値 : 関数が成功したら、 0 以外が返る。

 0x は16進数の意味です。x を大文字にして、0X と書かれることもあります。上記のように、Beep 関数で指定出来る周波数の範囲がありますが、人間が聴き取れる範囲には個人差があります。30000 とか指定すると、少なくとも私には聴こえませんでした。(^^;.... 持続時間はミリ秒単位で指定します。1000 と指定すると、1 秒と同じことですね。

 BOOL, DWORD は、typedef 演算子 によって、既存のデータ型に別名が付けられたデータ型です。ヘッダファイルに、以下のような感じで定義されています。

typedef 演算子が使われた例

// typedef 既存のデータ型名 新規のデータ型名;
typedef long BOOL;
typedef unsigned long DWORD;


 Beep 関数を使用する為には、ヘッダファイル windows.h のインクルードが必要です。

 Beep 関数の前に、スコープ解決演算子( :: を書いていますが、別に書かなくても構いません。スコープ解決演算子( :: ) から後は、グローバルで定義(宣言)されている、関数や変数等を書くことが出来ます。Visual C++ を使っているなら、2つ目のコロン( : ) を書いた時点で、以下のように『これでもか!』、というくらいたくさんの Windows API や C言語の関数等が表示されます。
 


 それでは、もう少し遊んでみましょう。

サンプルコード 

#include	<windows.h>

void main(void)
{
	::Beep(3000, 500);
	::Beep(4000, 200);
	::Beep(4000, 200);
}


 上記の例では、ビープ音が3回連続で鳴ります。ビープ音とビープ音の間を空けたい場合には、例えば以下のようにします。

サンプルコード

#include	<windows.h>

void main(void)
{
	::Beep(3000, 500);
	::Sleep(200);
	::Beep(4000, 200);
	::Sleep(200);
	::Beep(4000, 200);
}


 Sleep 関数は、指定した時間だけ眠らせます。名前の通りです。

Sleep 関数のプロトタイプ

VOID Sleep(
  DWORD dwMilliseconds  // 中断する時間
);

引数 : 中断する時間 をミリ秒(ms)単位で指定。
戻り値 : なし。


 VOID も以下のように別名が付けられたデータ型です。
 

// typedef 既存のデータ型名 新規のデータ型名;
typedef void VOID;


 Beep と Sleep 関数を組み合わせれば、音楽も作れちゃいますね。私には、音感がないので作れませんが、分かる人には簡単に作れると思います。まぁ、普通こんなので音楽は作りませんが。もし、これで音楽を作った人がいましたら、教えて下さい。(笑)


 さて、API の引数に指定する情報等がどこに書かれているのかというと、Visual C++ を使っているなら、付属の MSDN ライブラリ と呼ばれるヘルプに詳細に書かれています。例えば、Beep にカーソルを合わせて、「F1」キーを押すとBeep 関数が書かれたページにリンクされます。そこで、API を直接使う為の情報が書かれた、プラットフォーム SDK を見て下さい。

 MSDN ライブラリを持っていない場合は、ネットで検索すれば、その関数の情報がほぼ見つかります。Beep や Sleep のような短い名前の関数なら、求めていない情報も検索されてしまいますが、もっと長い関数名の API なら、知りたい情報に直ぐにたどり着くことが出来ます。Beep 関数でも、「Beep API」と組み合わせて検索すれば、比較的見つけ易い筈です。

 自分が作った以外の関数を使う場合には、普通、プロトタイプ等が書かれたヘッダファイルのインクルードと、その本体(実体)がどこにあるかという情報が書かれたライブラリファイル(*.lib)のリンクが必要です。良く使うライブラリファイルは、既定の設定でリンクされていますので、上記の例ではその設定が不要でした。ある API が、どのヘッダファイルとライブラリファイルが必要かという情報は、MSDN ライブラリ に書かれています。


 前置きが長かった気がしないでもないですが、次回からお待ちかねのゲーム作成へ移行します。

【スポンサード リンク】


Back Next

0からのゲームプログラミング > Windows API