Windows API Primer   メイン関数

ホーム   目次

API

API (Application Programming Interface) は、システム(OS)が用意している、アプリケーションを作るための関数群です。
Windows 3.1までの16bitシステム用をwin16、Windows 95以降の32bitシステム用をwin32と区別して呼ぶこともあります。

ヘッダファイル

Windows APIプログラムのソースコードの冒頭では、windows.h というヘッダファイルを読み込みます。
このヘッダファイルには、Windows APIで使われる型や識別子が定義されています。

メイン関数

アプリケーションは、システムから、そのアプリケーションのメイン関数を呼び出すことで起動します。
ほとんどのプログラミング言語のメイン関数は、main という名前ですが、Windows APIプログラミングでは、WinMain という名前になっています。

main.c


#include <windows.h>
#include <stdio.h>    // for printf

int WINAPI WinMain(HINSTANCE hInstance,
		   HINSTANCE hPrevInstance,
		   LPSTR     lpCmdLine,
		   int       nCmdShow)
{
  printf("Hello world!\n");
  return 0;
}
    


コンパイルと実行

コマンドプロンプトに、次のように入力します。


// コンパイル -mwindowsオプションはつけません
gcc main.c -o main

// 実行
main

// 実行結果
Hello world!
    


Visual Studio C++用コード

Visual Studioの場合はソースコードが少し違います。OutputDebugStringというデバッグ用の関数が用意されています。


#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
                  HINSTANCE hPrevInstance,
                  LPSTR     lpCmdLine,
                  int       nCmdShow)
{
	OutputDebugString(TEXT("Hello world!\n"));
	return 0;
}
    


コード説明

  1. stdio.hは、printf関数を使うために読み込んでいます。
  2. Windows APIでは、システムから呼び出される関数には WINAPI という呼び出し規約を記述する決まりになっています。呼び出し規約は、関数の呼び出し時に、引数をどのようにメモリに格納するかを決めています。
  3. Windows APIでは、いろいろな型が出てきます。その多くは typedef や、 ♯define で名前を変更した一般的なCの型です。WinMain関数には次の4つの引数があります。
    1. HINSTANCE hInstance
      HINSTANCEは、整数型です。Windows APIでは H がつく型はハンドルになっています。ハンドルとはシステムが管理しているインスタンス(実体)へのポインターですが、アプリケーションが管理する一般的なポインターとは少し違います。システムが管理するインスタンスは、システム(Windows OS)を起動するたびにその場所が変わる可能性があります。しかしハンドルはその場所を確実に追跡します。hInstanceには、そのアプリケーションのインスタンスの場所が入ります。具体的に言うと、そのアプリケションの exe ファイルの場所が入ります。
    2. HINSTANCE hPrevInstance
      16bit用アプリケーションの名残りです。現在では常に NULL になります。
    3. LPSTR lpCmdLine
      char * と同じです。Windows APIの型には命名規則があって、L はlongを P はpointerを現しています。lpCmdLineにはコマンドライン引数が入ります。
    4. int nCmdShow
      nCmdShowには、そのアプリケーションの表示状態を表す整数値が入ります。初期段階では通常表示を表す数値が入っています。
  4. OutputDebugString
    Visual Studio C++に用意されている関数です。デバックウィンドウに文字列を表示します。引数の文字列はTEXTというマクロで囲みます。TEXTマクロは、1バイト文字と2バイト文字を適宜適正な型に振り分けてくれます。


49430 visits
Posted: May. 31, 2020
Update: Jun. 03, 2020

ホーム   目次