////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2002/02/11(Mon) No.144
    配信数： 3760 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００２年２月１１日（月）の更新                */
http://www.kab-studio.com/

・更新なし
　３連休はちょっとゆっくり休ませてねー。


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2002/02/03 (Sun)
　へろへろになりつつ表紙壁紙完成。結構時間掛かったり。画法は今までと
同じだけど。今回みたいなのに google の画像検索は便利。テレビはおジャ
魔女どれみドッカ〜ン！　とギャラクシーエンジェルの新番ふたつがいい感
じ。あとあのダーマ＆グレッグの終わり方は何？

2002/02/04 (Mon)
　朝起きるの辛い。体が軋む。よく眠らなかったなぁ。帰りにヨドバシでス
トレートケーブル購入。ＷＢＳって東京ローカル？　ＣＧギャラリー人気高
くて嬉しいです〜。

2002/02/05 (Tue)
　寝る前にバーチャして死ぬ。スケジュール遅れる？　最近忙しくて外食多
いなー。そしてＷＢＳツッコミふたつ。東京ローカルじゃなかったのね〜。

2002/02/06 (Wed)
　本番に向けての要員教育、とそのための資料作り。帰ったらショウガ＆ニ
ンニクたっぷり生姜焼き。美味しいなぁ。それにしてもリブレット大活躍。
プレゼンとかに使いまくりです。

2002/02/07 (Thu)
　風邪ひいた。でも作業は進んだ？　コツとコードが貯まってきたからか
も。そんなとこ。

2002/02/08 (Fri)
　データの整理してから客先へ。でもうまく動かず(汗)。ポカミスが原因
だった……。とりあえず疲れたし勧められたんで３連休は休みます。帰り
にヨドバシで ATOK15 購入。性能はよーわからん。おねてぃは大人っぽさ
子供っぽさがいい感じ〜。

2002/02/09 (Sat)
　休みだけどのんびりせず？　ぷらとわ２話とイラスト。あと CG ギャラ
リーを整理するかも。バーチャ面白いっす。オリンピックスタート。もう
４年も経ったのか……。そして風邪。鼻が詰まってるのがまずいのね〜。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第三章　きもち　−７−

　タマネギの形をした空間。出口のない閉鎖された空間。白い壁で包まれた
空間。天井に埋め込まれた照明が影を作り出さない空間。直径１００メート
ルはある巨大な空間。
　見上げるほど高い天井から、窓が張り出している。その中には何人かの男
女が機械を前に作業をしていた。その内のひとり、白衣を着た女性の声がマ
イクを通してドーム型の空間へと出力される。
『これから第四十五回模擬対戦を行います。リシュネ他二名投下お願いしま
す』
　出窓の脇にふたつの穴が空き、そこからステップに乗ってリシュネと少年
が降りてくる。半分ほど降りたところでリシュネはステップから飛び降り、
きれいに一回転してから、ほんの少し減速して、着地した。
『リシュネ！』
「準備運動よ」
　リシュネはそう言って、体を動かす。黒いスイムウェアのようなボディ
スーツの上から、無駄のない筋肉の着き方が判る。少年と同じく子供だが、
冷めた表情と奥突の多い体がリシュネを大人びて見せていた。
　灰色のボディスーツを着た少年は、ステップが降りきるのを待ってから、
床へと降りた。リシュネの三メートルほど後ろで、すました表情を見せてい
た。
『いいわね、リシュネがメインよ。君はあくまでサポート』
「解ってますよ」
　少年は苦笑いを見せながら、リシュネの背中を見た。少年よりバージョン
は低くても、その外見から受ける印象は、リシュネの方が頼もしい。その状
況を、少年は不思議な気持ちで受け止めていた。
『では、ディルト投下してください』
　リシュネ達が出てきた出口と窓を挟んで反対側が開く。一瞬の間の後、何
かが落ちていった。
　それは、減速することなく灰色い床へと着地した。弾性の全くない壁が鈍
い音を響かせた。
　顔を覆い隠す金色の長髪から、瞳が覗く。白いボディスーツからは骨格が
そのまま浮き出て見える。ディルトという男の顔は、顎が長く尖っていて、
鼻が高い。目は見開かれ、常に何かを口走っている。頬はこけ、細長い四肢
が機械のように伸びていた。
『ふたりとも、いいわね？』
　リシュネはリラックスした笑みで、ディルトは口を裂けそうなほど横に開
いた笑みで答えた。
『では、始め！』
『神の加護は我の元にあり』
　ディルトはそうつぶやき、両腕を大きく振りかぶった。交差された両腕か
ら放たれた強烈な風がリシュネに向かって飛んでいく。リシュネは驚きつ
つ、それを見てから反応し両腕を交差した。
「！　リシュネ！」
　風の刃はリシュネを突き抜けていった。少年は叫びつつ、冷静にそれを弾
き飛ばした。
「大丈夫」
　リシュネはそう答えるが、一瞬後にボディースーツの至る所が大きく裂
け、その中の白い肌にも綺麗な線が現れる。そして、そこから血が流れ出
す。
　ディルトが第二撃を放とうとしているのを見て、リシュネは両手を突き出
して構えた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『なんかＣＧギャラリーが色々あるみたいだけど、なんなの？』
「一番の問題は、ホームページの容量」
『結構きつきつ？』
「この前４５から５０に増やしたんだけど、それでもね」
『ってゆーか、単位メガでしょ？　壁紙って４００キロあるんだから』
「そう、これが最近大変。だからちょっと前のをどうにかしようって話」
『どうにかって？』
「今は外部のストレージサービスを使う予定らしいよ」
『なにそれ』
「ストレージっていうのは保存とかのこと。ハードディスクとかも言うよ」
『そういえば聞いたことある。そういうサービスってタダであるよね』
「うん、そういうので、 LZH で圧縮して、みたいな？」
『あたしって容量食いまくってるのね〜』
「……デ」
『げし！』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/


　Version 8.02
インスタンスハンドル

「今回も引き続き、 WinMain() 関数について見ていきます」
『一番最初に呼ばれる関数なんだよね。こういう』

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )

『引数と戻り値で』
「そう。で、前回は WINAPI っていうのの説明だけしました」
『ってことは今回は引数ね』
「そう、今回はその中でも重要な【インスタンスハンドル】っていうものに
ついて解説します」
『いんすたんすはんどる……いんすたんすのハンドルなんだろうけど、イン
スタンスって？』
「英語で instance 、〈実体〉って意味があります」
『実体、ねぇ』
「この用語、実はいろんな場面で使われるから、注意してね。とりあえず
は【インスタンスハンドル】って【ハンドル】まで付けちゃえば、他と間違
えることはないかな」
『んー、でもウィンドウハンドルみたく、なんかのハンドルではあるんだよ
ね』
「そう、インスタンスのハンドル」
『そのまんま。そのインスタンスはなんなの？』
「アプリの実体、っていうのが一番正しいんだけど……」
『歯切れ悪いわねー』
「たとえば今回の SimpleDialog.exe 」
『これがアプリよね』
「正確に言えば実行ファイル、かな」
『実行するファイルね』
「アプリケーションっていうのは実行ファイルの他にいろんなファイルも
くっつけてまとめてパッケージに入れてお店で売ってるの、かな」
『なんか細かいね』
「結構この辺って色々あってね……で、この実行ファイルをダブルクリック
すれば実行できます。でも、これは実体じゃないんです」
『どゆこと？』
「これはファイル。ハードディスクに置かれたファイルで、これだけだとど
うやっても実行できないんです」
『でもダブルクリックしたら実行できるじゃない』
「つまりダブルクリックしたら〈実行できる形〉にしてくれるんです」
『あ、そしたら実行できる！』
「そゆこと。この〈実行できる形〉っていうのは、このファイルがメモリに
置かれた状態もののことなんです」
『メモリの上？』
「メモリの上。ハードディスクの上の情報を、メモリの上にコピーしたら、
やっと実行できる状態になるんです」
『複雑ねぇ……あ、それでインスタンスって？』
「インスタンスは、このメモリ上に置かれたファイルのこと」
『そっか、実行できるこっちの方が実体になるんだ！』
「このメモリ上に置かれてやっと、ウィンドウズはこの実行ファイルの中の
プログラムを読んで、実行してくれるんです」
『なんか複雑ね』
「まぁ、たとえて言うなら、人間が本を読む時も同じかな」
『……本の複製は作んないじゃん』
「でも、本の内容は一度頭の中に入れるでしょ」
『頭の中って脳のこと？　そっか、それがメモリなんだ』
「そゆこと。……余計ややこしくなっちゃったかな」
『ようするにファイルをメモリに置かないとダメってことね』
「ま、それはそういうこと。じゃあそれを実際に見てみます」

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    MessageBox( NULL, "テスト", "WinMain()", MB_OK );
    return 0;    // ここにブレークポイント。
}

「指定したとこにブレークポイント置いて」
『手袋マークっと。実行してダイアログ出て閉じて止まるっと』
「まず、プログラムがメモリに置かれてるってのを見た方がいい
かな。【混合モード】って憶えてる？」
『 Version 6.08 ( No.108 ) でやったね。あ！　ここでも〈プログラムの
置かれたアドレス〉って言ってる！』
「そう、つまり実行ファイルがメモリ上に置かれてて、だからそのアドレス
もちゃんとあるわけ」
『ってことは、変数なんかと同じとこにあるの？』
「それを見るためには？」
『ポインタの時に使ったメモリウィンドウ！』
「そゆこと。 Version 4.02 ( No.052 ) を参照ってことで……っとその前
に、その混合モードのとこ」

13:       return 0;
0040D775 33 C0                xor         eax,eax
14:   }

「これの見方をまず簡単に教えておくね」

13:       return 0;

『これはただのコードだよね』
「そう、このコードの下にある１行が、コンパイルして実行されてメモリに
置かれたものそのもの」
『左端がアドレスね。それはわかるんだけど……』
「その右の 33 C0 は、コンピューター専用の言葉。この言葉を【機械語】
とか【マシン語】って言います」
『機械の言葉だから機械語ね』
「昔の人は、これを直接書いてプログラム作ってたらしいよ」
『げ！　信じらんない！』
「ま、それに近いことは今でもしたり」
『げげ』
「それに使うのが、右の xor とか。これは【アセンブラ言語】っていうも
の」
『お、ちょっとプログラミングっぽいね』
「って言っても、これは左側の数字をただちょっと分かりやすい単語に置き
換えただけなんだけどね」
『っつーか xor ってなんかよく分かんない……』
「このアセンブラは、実は C++ 言語のプログラムの中に普通に書くことが
できるんです」
『！　ってことはいつかこれ教えられるの！？』
「いや、僕もちょっとこれは苦手……」
『ほっ』
「と、その辺はとりあえず本題とは違うので置いときます。ここで重要なの
はアドレス。じゃあ、このアドレスをメモリウィンドウで見てみて」
『ほい。メモリウィンドウを出して、上の【アドレス】にこのアドレス
を……』
「 Ctrl+c でコピー、 Ctrl+v で貼り付けられるから」
『おお。んでリターン』

0040D775 33 C0 5F 5E 5B 83 C4 40 3B EC E8 7C 39 FF FF 8B E5 5D C2 10

『おおっ、 33 C0 が同じ！』
「ここで重要なのは、これがメモリウィンドウだってこと」
『……何バカ言ってるの、当たり前じゃない』
「これで、ポインタの時は何を見た？」
『変数の中身……あ！　変数と、プログラム、同じとこに置かれてる！！』
「そうなんです。つまり、メモリにアクセスできるってことは、プログラム
そのものにもアクセスできるってことなんです」
『……結構危険ね……』
「うん、危険。こういうとこしっかり知っておかないと、これから本当にま
ずいプログラム書きかねないから」
『なんか真面目……』
「実際、これまでと今回からってちょっと違うかも」
『重さが違う〜』
「で、話を元に戻して、インスタンスハンドル」
『そうそう、それそれ』
「まずはっきり言っちゃえば、ハンドルはポインタと同じ」
『前に聞いたような……』
「うん、少しずつ言ってはいたからね。で、ハンドルがポインタと同じって
ことは、ハンドルはアドレス、ってことはインスタンスハンドルはインスタ
ンスのアドレス」
『ってことはプログラムそのもののアドレス！』
「そゆこと。というわけで見てみましょう。今度は変数ウィンドウを開い
て」
『今回はデバッグウィンドウ使いまくりね。ほい。あ、インスタンスハンド
ル見るの？』
「そう、ローカルで p_hInstance を見てみて。いくつになってる？」
『１６進数で 0x00400000 だよ。これをメモリウィンドウで見る！』

00400000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 00 00 00

『……やや意味不明な感じが……』
「実は、前にもこれと似たようなのを見たことがあるんだよねー」
『げ、そう？』
「ま、かなり昔だから忘れちゃったと思うけど。 Version 1.0 ( No.003 ) 
を見て」
『うわ、昔すぎ！　見たくない！』
「まぁ見なくてもいいかも……この時と同じように、 SimpleDialog.exe を
バイナリーファイルとして開いてみて」
『ほいほい。なんか不思議な感じ……とりゃ』

000000 4D 5A 90 00 03 00 00 00  04 00 00 00 FF FF 00 00

『お！　同じだ！　ってことは、メモリの上に実行ファイルがそのまんま置
かれてる！』
「ま、そのままってわけじゃないけどね」
『あ、ホントだちょっと違う』
「でもほとんど同じと思っていいかな。こういうふうに、実行ファイルはメ
モリ上に置かれます。で！」
『で？　あ、インスタンスハンドル！』
「そう、インスタンスハンドルは 0x00400000 、このアドレスから実行ファ
イルが置かれてます」
『メモリウィンドウは、その上だと ?? になっちゃってるね』
「つまり、このインスタンスハンドルは、メモリ上のどこから実行ファイル
が置かれてるか、ってこと示すアドレスのことなんです」
『おおお！　つまりそのプログラムの、メモリ上の最初のとこってことね』
「簡単に言えばそういうこと」
『……で？』
「で、 Version 3.6 ( No.031 ) でちょっとやったけど、 LoadIcon() って
API を使う時に」
『インスタンスハンドル渡してるね』
「 LoadIcon() は、実行ファイルの中に埋め込まれてるアイコンを使える状
態にする API 。この関数にインスタンスハンドルを渡すのは、プログラム
の最初が分からないといけないから」
『そのためにインスタンスハンドルが必要なのねー』
「 API ではこういうことくらいしかインスタンスハンドルを使いません。
だから、実はインスタンスハンドルって特に重要じゃないんです」
『アドレスも、なんかすごく切りのいい数字だし、あんま重要じゃないの
ね』
「が！」
『が？』
「というわけで次回に続く」

/*
    Preview Next Story!
*/
『またメモリウィンドウ大活躍ね〜』
「これは大きいんだよ。他のだとこういうのついてないから」
『他のって？』
「 gcc とか bcc とか、タダのがあるんだよね」
『 VC っていくらくらい？』
「結構するかな。でも、特に初心者はデバッグ環境が重要！」
『そのひとつがこのメモリウィンドウなわけね』
「というわけで次回」
＜ Version 8.03 インスタンスとメモリ ＞
『につづく！』
「というわけで、あと２回くらいメモリウィンドウ使います」
『ケチくさ！』


////////////////////////////////////////////////////////////////////
/*                ２００２年２月１８日（月）の更新                */
http://www.kab-studio.com/

・ＣＧギャラリー整理？]
　 CG Gallery を整理するかもしれません。
　現在、ホットハーブと表紙壁紙が容量を食いまくっていて、ホットハーブ
はどうにもできないので、表紙壁紙の方を、昔のを圧縮ファイルに格納す
る、といったことをするかもしれません。
　「あのＣＧはもう見れないの？」ってことはないのでご安心を。もしかし
たら、もっと昔のも……？
[ CG Gallery ]
http://www.kab-studio.com/CG/Gallery/


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

