時乃工房-Windowsとアマグラマーな関係-

アクセスアップにオートリンクネット リンクが自動で増殖オートリンクの登録はこちら 節約内職情報検索局
ページランク向上リンク集
役立つリンク集 Web Links
SEO対策ディレクトリ型検索エンジン Su-Jine
メニュー
トップ
アマグラミング
C++編 目次
第3章
第5章
ソフトウェア開発製品
相互リンク

<勘違いだらけのアマグラミングな日々(C++編)>

第4章 Windowsの入り口

2006年8月9日

さて、いよいよWindowsプログラミングに挑戦してみよう。
マルチタスクでグラフィカルなOSってとこが売りのWindowsであるが、ソースは当然テキストで書くことになる。
これまで色々試してみて感じたことは、主導権が完全にOSにあること、グラフィカルな部分はOSが提供する機能の範囲で実現可能なので、基本的にシンプルであること、そして、あらゆる機能が関数で提供される為、膨大な資料の中から必要な機能を探す必要があること、などである。
特に、やりたいことを決めてから機能を探すか、あらかじめ知っている機能の中から何が出来るのか考えて取り掛かるか、の判断が難しいと思った。

ともかく、何にもしないことをプログラムしてみる。
事実上最小のWindowsプログラムだと云えるだろう。

/*
 Title    :List.001-001
 Filename:"main.cpp"
*/


//インクルードファイル---------------------------------------
#include        <windows.h>

//エントリーポイント-----------------------------------------
int     WINAPI  WinMain(  HINSTANCE  main_instance,
                               HINSTANCE  pre_instance,
                               LPSTR        argment_characters,
                               int            window_mode)
{
       return  0;
}
ソースのダウンロード

いきなり関数main()が無いので少し戸惑ってしまうが、なにもC言語の仕様が曲げられてしまっているわけではない。
あくまで、マイクロソフトが用意した偽りのエントリーポイント関数WinMain()を使用しなさいよ、と云うだけのことのようだ。

試しに、次のようなNGソースを用意してコンパイルしてみる。

/*
 Title    :List.001-002
 Filename:"main.cpp"
*/


//#include      <windows.h> コメントアウトしてみる

int     WINAPI  WinMain(  HINSTANCE  main_instance,
                               HINSTANCE  pre_instance,
                               LPSTR        argment_characters,
                               int            window_mode)
{
       return  0;
}
ソースのダウンロード

以上のソースがビルドできないことから、関数WinMain()は"windows.h"のどこかで宣言されたものだと推測される。
もう少し理解を深める為に(邪推する為に?)次のようなコードを書いてみた。

/*
 Title    :List.001-003
 Filename:"header.h"
*/


//関数プロトタイプ宣言---------------------------------------
int     AmaMain(  int);
/*
 Title    :List.001-003
 Filename:"main.cpp"
*/


//インクルードファイル---------------------------------------
#include        "header.h"

//偽りのエントリーポイント------------------------------------
int     AmaMain(  int  number)
{
       return  0;
}
/*
 Title    :List.001-003
 Filename:"amagraming.cpp"
*/


//インクルードファイル---------------------------------------
#include        "header.h"

//本当のエントリーポイント------------------------------------
int     main(  void)
{
       int     answer= 0;

       answer= AmaMain( 1);

       return  1;
}
ソースのダウンロード

ちなみに、これはコンソールのプロジェクトでないとビルドできない

このようなコードを書いて"header.h"をライブラリと称し、関数AmaMain()の中にメインとなるソースを書けば、あたかも関数AmaMain()がエントリーポイントのように振舞ってくれるだろう。
もっとも、こんな陳腐な方法で関数WinMain()が実装されているはずは無いが。

コールバックプロシージャとかメッセージプロシージャなんて言葉に聞き覚えのある人は、なぜマイクロソフトがこんな面倒なことをしているのか想像がつくのかもしれない。

<前章> <目次> <次章>





<時乃工房>
Net Office Nakai
メビウスリング投稿掲示板には小説日記ゲームアニメコミック小学生中学生などの掲示板過去ログがあります。相互リンクも募集中。