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

    KAB-studio.h


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

    送信日： 2001/04/16(Mon) No.103
    配信数： 3840（ 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/

・更新なし
　なんだかんだ言って結構忙しいです、仕事。少しずつ色々小ネタを使って
更新していきたいけど、ネタ切れ時は更新なし、ということで。


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

2001/04/08 (Sun)
　のんびりした１日。デフラグするほど。例によってアニメがいっぱいの日
曜日です。時間的コスト考えると結構大変？　だぁ！だぁ！だぁ！が始まっ
たけどこれも結構いいし。んでＵＨＦをケーブルテレビでは？

2001/04/09 (Mon)
　足疲れる。おそらくこれがすべての発端だった……。ガストでごはん食べ
たりビックカメラでヘッドホン購入。あ、これ使ってない……。あとメモリ
とビデオデッキの値段を確認。体重。謎のバス教習車。そして風雅、舞いの
予定〜。

2001/04/10 (Tue)
　風邪！　ヤバイ系の強烈な風邪で体調最悪。自習だけだったから助かっ
た？　でもテストは１００点(爆)。

2001/04/11 (Wed)
　サーバーメンテの障害？　しかもまだ風邪。ダブルはきつい……。そして
風邪引きもう１人。皆さんも体をお大事に……。

2001/04/12 (Thu)
　サーバー謎状態のやや詳細について。この忙しい時に〜。でもとりあえず
復活して安心。研修では再び情報処理２種模擬試験。結構いい点数？　風邪
は少し復調。

2001/04/13 (Fri)
　体調はかなり復調。研修は自習。勉強しやすいものとしにくいものがある
のね。んでこれからの予定とか謎状態の理由とかとか。ノワールいいねぇ。

2001/04/14 (Sat)
　久しぶりに寮へ〜。ちょっと三段ラックとか持っていったり。寮への道の
りは多摩川沿いを。旧メールアドレスを廃止するのでご注意を。んでアドミ
ニの愚痴(爆)。シスアドは大変そうだ……。


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

■　序　−３−

　振り向いたその先には、白いテーブルに似合わない色黒の青年が、これま
たミスマッチなアイスクリームを食べていた。その顔は、舞の方を向いてい
なかった。黒いジャケットの背しか見えなかった。
「そっか、チョコミントか……やっぱしチョコだけの方がいいな」
　そう、その男は言った。
　誰もいない方へ。
　舞の視線＝青年の視線のはず、だけどそこには誰もいない。誰も、いない
のに、話しかけて、いる――ヤバイ。
「何言ってんだよー、別にそんなわけじゃ……え？　後ろ？」
　青年は、くるりと後ろを向いた。
　重なる視線、瞳、時間。わずかな間、二人は見つめ合っていた……ほんの
わずかな間。
　青年は、慣れているかのように苦笑いした。
「ごめんな、気になっちゃったか。いや、もう立ち去るから」
　そう言ってコーンのしっぽを口に放り込むと、すっくと立ち上がった。舞
が見上げるその姿は、とてつもなく高く見えた。黒いナイロン製のジャケッ
トと赤のタンクトップ、そして空色のジーパン――どれもが使い古されたよ
うに所々裂けていた。そして、それが似合うほど、青年はたくましく見え
た。
「ん？　結構うまかったよ。ホントだって！」
　またもやあさっての方向に話しだし、それが舞の心を砕いた。いい男なん
だけど、これじゃ論外……。
「知り合い？」
「え？　ううん、違う違う」
　再び会話に戻っても、なんか落ち着かなかった。また振り向いてみたい、
という衝動に駆られるが、なんか変な目で見られそうだから、やめた。
　変な目で見られるのは、嫌だ。
　その場を離れようとしていた青年が、振り向いた。
「え……？」
　俊雄が、後ろを向く。舞が、その視線の先を追う。木々の向こう、公道か
ら、車の音が聞こえる。その音はどんどん近づいてくるようだった。
　その音は、本当に大きくなっていった。
「……何？」
　桜が舞い散り芝生が巻き上げられる。木々に囲まれた丘の上から飛び出し
てきたジムニーが、とんでもない高さから着地して、バウンドした。
「ドラマみたい……」
                                                              (続く)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『更新なし！　久しぶりねー』
「前回は１１月２０日だから、５か月ぶり」
『でも来週から、とうとう？』
「ウェブ４コママンガ、ホットハーブが始まる！」
『っていうか、自分を引っ込みつかなくさせようとしてる……』
「作者も無茶なことを……ま、そのためのかなゆ〜休止とか、なのかな」
『制作状況は？』
「絵の枚数的には、あまり描かれてないね。でも」
『でも？』
「作者のザウルスに、話のネタが結構書かれてるから」
『描き始めれば、どんどん？』
「毎週１話くらいなら大丈夫なんじゃないかな」
『で、それ……面白いの？』
「さぁ……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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


　Version 6.03
別名に注意！

『この前はクラスのメンバ変数の話をしたんだよね』
「 . や -> でメンバ変数にアクセスしたら、その変数だけに注目すればい
い、ってことでした。今回は、型関係のエラーの続き」
『そうそう、関数の引数に渡すときとかよくあるんだけど』
「特に API はそうでしょ。意味不明な型が結構あるからね。たとえば 
WPARAM や LPARAM 」
『メッセージの時に出てきたのだね』
「 WPARAM は unsigned int で LPARAM は long 。これが実際にそうなって
るのは Windef.h ってファイル」

typedef UINT WPARAM;
typedef LONG LPARAM;

『 typedef って……あ、 Ver 5.08 ( No.073 ) でやったね。型に違う名前
付けるのだ』
「そう。ここでは UINT の新しい名前に WPARAM を、 LONG の新しい名前に
LPARAM を加えてます」
『……で、 UINT は？　 LONG って？』
「それも同じファイルの上の方で typedef されてるから」

typedef unsigned int        UINT;

「あ、 LONG は別だね。 Wtypes.h だ」

typedef long LONG;

『結局 unsigned int と long だったってわけね』
「これをどう調べるかって言うのは」
『ファイルから検索、でしょ』
「そう。【編集】−【ファイルから検索】で検索。検索場所は、 API 関連
のファイルが置いてある MICROSOFT VISUAL STUDIO\VC98\Include で」
『そこには API のファイルしかないの？』
「 API と、ランタイムのヘッダーファイル。だから一緒にランタイムも調
べることになるかな」
『質問！　実際に調べると、 WPARAM とかで調べると一杯出てきちゃうんだ
けど』
「検索一覧をクリックしてから Ctrl + F で」
『あ、検索ダイアログが！』
「それで typedef を検索、とか」
『なるほど。もひとつ質問！　 LONG で検索したら Wtypes.h だけじゃなく
て Winnt.h でも見つかったんだけど、どっち？』
「場合によって」
『ばあいによってぇ！？』
「そうなんだって、ホントに。この例はどっちも同じ long だからいいけ
ど、ものによってはファイルによって何の型か違うことがあるし」
『……それってつまり、 typedef char LONG ってことがあるかもしんない
ってこと？　なにそれわけ分かんない！』
「まーまー。手っ取り早く、ホントは何の型か調べるときにはこういうふう
にしましょう」

    WPARAM wParam;
    int *pi = wParam;

『？』
「こうするとこういうコンパイルエラーが出ます」

error C2440: 'initializing' : 
    'unsigned int' から 'int *' に変換することはできません。

「これで wParam の型が unsigned int だって分かるわけ」
『うわ、コンパイルエラーで型調べるの！？　そーゆーのっていいの？』
「もちろん。ちなみに int * は何でもいいんだけど、このエラーは〈 = で
右から左に代入できないとき〉に出るから」
『代入できない型にするんだ。ってことは調べたい型が int * っぽかったら
他のにした方がいいのね』
「ポインタ以外はポインタに、ポインタはポインタ以外に、ってとこかな」
『最後の質問！！　なんでわざわざこーゆーしちめんどくさいことしてる
の？　 WPARAM なんて書かずに直接 unsigned int って書けばいいじゃん』
「建前上は、あとで型を変えることができる、っていう理由から」
『建前上はぁ？』
「たとえば、 C++ 言語の規則が変わって〈 int がなくなった！〉って場合
に」
『そんなことになったら int で書いてる部分全部直さないと』
「でも UINT を使ってたら、 typedef unsigned int UINT を書き換えるだ
けで」
『全部いっぺんに変えられる！』
「そういう利点があるから。ただその分、必要ない部分を変えちゃったら」
『いっぱい問題が出てくるね……』
「それに、他の OS では使えないし」
『どゆこと？』
「 UINT なんかの型は Windows API だけのものだから。他の OS でプログ
ラム組むときには使えないから」
『ってことは、各 OS ごとにそーゆー API があるの？』
「そういうこと。ウィンドウズに絞ってある程度やっておけば、他のでもあ
る程度通用すると思うから安心して」
『はーい』
「それにも関連してるんだけど、 API は実はこの typedef の嵐だったりし
ます。たとえば」

typedef int                 INT;

「が Windef.h にあります」
『うわ、 int にも！』
「他によく出てくるのが DWORD とか WORD とか BYTE とか。こういうのは 
Wtypes.h にあるね」
『こーゆーのの型も調べなきゃいけないんだ』
「一度は直に見た方がいいよ。ま、簡単に言えば BYTE が unsigned char 
で WORD が unsigned short 。 DWORD は double WORD の略だから」
『 double 、倍…… short の倍は４バイトだから、 unsigned long なんだ
ね、 DWORD は』
「そういうこと。で、まとめると、こういうふうに型に違う名前を付けるの
が API のポリシーってこと」
『趣味悪そう……』
「同じようなので、ポインタでこういう typedef してるのもあります」
『知ってる！　 LPCTSTR とかだよね』
「それだけじゃないよ。さっき言った DWORD のポインタ版 LPDWORD とか」
『……もしかして LPINT も？』
「あります。 Windef.h にね」

typedef int near            *PINT;
typedef int far             *LPINT;

『？？？　なんか謎。 near とか far とかって？』
「これはね、 Windows 3.1 って知ってる？」
『大昔のウィンドウズだよね』
「大昔……まーそういうことで。今はポインタのサイズは？」
『３２ビット』
「だけど、大昔はそんなにコンピューターに余裕なかったから、小さいポイ
ンタと大きいポインタのふたつを用意してたんです」
『それが near と far なんだ。近くと遠く？』
「アドレスで考えるとそういうこと、ってことなんだろうね。で、 near は
小さいから普通に P 、 far は long サイズのポインタだから LP を付ける
わけ」
『そっか、今は全部大きいポインタだからどれも LP の付いてる方使ってる
んだ！』
「一応ね」
『一応？』
「上の方でこういうのあるでしょ」

#define far
#define near

「 #define って憶えてる？」
『 Ver 4.09 ( No.059 ) でやったね。あれ、でもあれは……』
「そう。たとえば」

#define DEF_FLAG_OK 1    // 定数。

『これだったら、 DEF_FLAG_OK を 1 に置き換える……って、そういえばこ
れって typedef みたいだね』
「そだね、 typedef は #define の機能を〈型の名前〉だけに機能するよう
にしたものって言えるかも」
『ほほう』
「で、 #define far は、 1 にあたる部分が何もない、つまり〈空白〉に
なってるわけだから」
『ってことは far や near は空白に置き換えられる？』
「そういうこと！　つまり、これらの単語が出てきたら消されちゃうってこ
と」
『あ！　だから PINT も LPINT も同じなんだ』
「だからどっちを使ってもいいんだけど、基本的には LP 付いてる方。もー
しかしたら、 Windows 3.1 に移植することがあって、そのときその方が楽
だから」
『絶対ないような気がするんだけど』
「それがある業界なんだよね……あ、あと最後に const について」
『引数に使う const って前にかなりしっかりやったよね』
「 Ver 4.12 ( No.062 ) だね。そこでもやったけど」

      int のアドレスを       int * へ
      int のアドレスを const int * へ
const int のアドレスを const int * へ

「はコンパイルエラーにならないけど」

const int のアドレスを       int * へ

「はコンパイルエラーになります」
『ようするに、書き換えちゃいけないのを書き換えるようにしちゃいけな
いってことだよね』
「そういうこと。これはさっき言った typedef のにも当てはまるからね」
『あ、そっか、 LPCTSTR と LPTSTR もこれなんだもんね』
「さて、型関係のエラーはこの辺……ってことにしといて」
『ぶーぶー、もっといっぱいあるよ確かー』
「〈コンパイルエラーは論外〉って言った手前なんだけど、コンパイルエ
ラーが起きるからには理由があるわけで、その理由を知らないと」
『教えてもらっても理解できない、ってことねー』
「そゆこと。その辺はこれから少しずつ教えてくから」

/*
    Preview Next Story!
*/
『教えてもらうまでは大変ね……』
「僕も昔はホント、色々失敗したけどね」
『そういうもん？』
「うまくいったけど理解できてないコードを ML に載せたり……」
『ありゃりゃ……』
「というわけで次回」
＜ Version 6.04 あるのにない！！ ＞
『ねぇ、今教えてくれてるのにはそういうことないのぉ？』
「……ギクっ……」
『ツッコむとこでしょそこは……』


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

・ホットハーブ、準備開始
　少しずつ計画中のウェブ４コママンガ「三人合体ホットハーブ」の、最初
のページだけ公開します。まだ準備が整ってないため各コンテンツの更新は
まだですが、「ホントにやるぞ！」という意気込みの現れということで。


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////




