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

    KAB-studio.h


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

    送信日： 2003/06/09(Mon) No.210
    配信数： 3180 ( 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/Comic/HotHerb/

・夏コミ情報！
　夏コミに当選しました！　日曜日、ウ−４９ａ「KAB-studio」です。
　というわけで夏コミ情報ページを追加しました。
　まだ情報少ないけど（汗）。
[ 夏コミ情報 ] 
http://www.kab-studio.biz/Info/Product/C64/


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/06/01 (Sun)
　洗濯やらサーバーメンテやら忙しい。 Apache から Tomcat への連携に手
間取る。新ツッコミシステム。「MUVO」壊れる。土日忙しい。６月は前の 
Java プロジェクトに戻りそう。

2003/06/02 (Mon)
　http じゃなくて https が来ててんやわんや。 MUVO がフォーマットで
直った。

2003/06/03 (Tue)
　https って SSL やん。 OpenSSL 組み込みができず、 IE コンポーネント
を使うことに。作り替えで手間取る。実は西武ファンです。

2003/06/04 (Wed)
　夏コミ来ました。日曜日（８月１７日）、ウ−４９ａ「KAB-studio」で
す。お仕事は IE のの続き。なんとかできた。帰りに横浜寄っていっぱい
買ってくる。結構やるゲームあるなぁ。

2003/06/05 (Thu)
　リブレットの VC6 でプログラム作り。６月にする仕事の話。夏コミ情
報。ほとはー外伝と KAB-studio.rom 。売るのはひとりぼっち。そして
沖縄と某ベンチマーク。

2003/06/06 (Fri)
　徹夜でゲーム大会。ペケ箱とか。 Tomcat 落ちてた。原因不明。そして 
CD 大量生産用ドライブ。そして MFC のソース。

2003/06/07 (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 11.10
いろいろあるメモリ確保の方法

「前回は malloc() を使ってメモリを確保したけど、実際にはいろいろな方
法があります」

・ランタイム（ malloc() / free() ）
　長所：比較的簡単に使える。例が多い。
　短所：特になし。
・ API （ GlobalAlloc() 他いろいろ ）
　長所：細かく操作できる。特殊な使い方ができる。
　短所：使うのが面倒。
・ C++ の機能（ new / delete ）
　長所：コンストラクタ/デストラクタが呼べる。上記を代わりに使える。
　短所：構文が変数ひとつと配列で違う。 C 言語では使えない。

『ほほう』
「で、あとで説明するけど、実際には最後の C++ のを使わなくちゃいけな
いんです」
『へ？　じゃあ malloc() のは間違いなの？？』
「ううん、あれはあれで正しいよ。ただ、 malloc() を使えない場合があっ
て、その場合には C++ の new と delete を使う事になるから、なら」
『全部 new と delete にしちゃった方がいい？』
「っていう話になるからね。ただ、 malloc() は使いやすいし、わかりやす
いから、無駄じゃないよ」
『ってことは、他はちょっと複雑なんだ』
「まぁね。まず、 API について見ておこうか」

void UseGlobalAlloc()
{
    // このデータが入る領域を確保します。
    const char *const DATA = "あいうえお";

    // まずハンドルを取得。
    HGLOBAL hGlobal
         = GlobalAlloc( GMEM_MOVEABLE, strlen( DATA ) + 1 );
    // 次にメモリを確保。
    char *pch = (char *)GlobalLock( hGlobal );

    // コピーしてから出力。
    strcpy( pch, DATA );
    TRACE( "%s\n", pch );

    // 解放します。
    GlobalFree( pch );
}

『 malloc() と同じ……じゃないんだね。なんか２段階になってる』
「そう、 API でメモリを確保するときにはふたつのステップを踏む必要が
あります。まず、ポインタを操作するためのハンドルを取得します」

    // まずハンドルを取得。
    HGLOBAL hGlobal
         = GlobalAlloc( GMEM_MOVEABLE, strlen( DATA ) + 1 );

『ハンドルって、ウィンドウハンドルとかと同じハンドル？』
「そう、同じもの。メモリもウィンドウズシステムが管理してるから」
『同じように操作するのはハンドル経由ってことね』
「ハンドルを取得したら、次はそのハンドルを使ってメモリを確保します」

    // 次にメモリを確保。
    char *pch = (char *)GlobalLock( hGlobal );

『これは malloc() と同じね』
「その次の文字列のコピーも同じ。ポインタとして取得しちゃえばもう普通
のポインタとして使えるから」
『で』

    // 解放します。
    GlobalFree( pch );

『で解放ね。これも free() と同じね』
「だから、基本的にはランタイムを使う場合と同じ。それに実は、 
malloc() とまったく同じようにも取得できるんです」
『へ？』

void UseGlobalAllocFixed()
{
    // このデータが入る領域を確保します。
    const char *const DATA = "あいうえお";

    // 直接メモリを確保。
    char *pch
        = (char *)GlobalAlloc( GMEM_FIXED, strlen( DATA ) + 1 );

    // コピーしてから出力。
    strcpy( pch, DATA );
    TRACE( "%s\n", pch );

    // 解放します。
    GlobalFree( pch );
}

『ホントだ、同じ GlobalAlloc() なのに直接ポインタ取ってきてる』
「第１引数に GMEM_FIXED を渡すとそうなります」
『でもなんでこっちを最初にしなかったの？　これならホントに malloc() 
と同じじゃん』
「そう、簡単なのはこっちだと思うんだけど、 GlobalAlloc() の戻り値は
HGLOBAL だから、ポインタとはちょっと違うんだよね。だから HGLOBAL を
取得する方法の方が、正しい方法かな、って思って」
『 GlobalAlloc() は HGLOBAL を返すのが正しい役目ってことね』
「そういうこと。で、メモリ関係の API は実はこれだけじゃないんです」
『まだあるの？』
「 VirtualAlloc() と VirtualFree() っていう API があって、こっちはか
なり複雑です」

void UseVirtualAlloc()
{
    // このデータが入る領域を確保します。
    const char *const DATA = "あいうえお";

    // メモリを確保。
    char *pch
        = (char *)VirtualAlloc
                ( 0
                , strlen( DATA ) + 1 
                , MEM_COMMIT
                , PAGE_EXECUTE_READWRITE
                );

    // コピーしてから出力。
    strcpy( pch, DATA );
    TRACE( "%s\n", pch );

    // 解放します。
    VirtualFree
        ( pch
        , 0
        , MEM_RELEASE
        );
}

『うわ、かなり複雑！』
「こっちは当分使わないから細かい解説はしないけど、単純にメモリを確保
するんじゃなくて、メモリ上の場所とかを指定して細かく取得できるんで
す」
『へー』
「特に、この関数で取得した領域は、他のプロセスからもアクセスできるよ
うにしたりできるんです」
『他……ってことは他から書き換えられちゃうんじゃ？？　それってまずく
ない？』
「他のプログラムからは見えないから大丈夫。メモリを確保しても、そのポ
インタはわからないでしょ？」
『そういえば……』
「で、他からアクセスできるから、逆にこれを使うと他のプロセスにもアク
セスできるんです」
『あ、そっちの方がまずそう……』
「まぁね……これを使うと、たとえば他のアプリのダイアログに張り付いて
いるツリーコントロールから情報を取得したりできます」
『それはちょっと面白そう』
「実際にはそういう特殊な使い方のためにしか使わないと思うから、とりあ
えずは忘れていいよ」
『はーい』
「で、 API にはまだ HeapAlloc() と HeapFree() っていうのもあります」
『げ！　まだあるんだ』
「まぁこれも直接は使わないから、ここでは説明しません」
『直接？』
「そう、こういうメモリ確保系 API を使う上で重要なことがふたつあっ
て、まずひとつは、メモリの操作は OS の操作だから、結局は API を使う
ことになります」
『結局？』
「 malloc() も API 使ってるってこと」
『あ！　そうだよね、ファイル操作も確かそうだったもんね』
「 Version 5.18 ( No.083 ) で見たね。 malloc() / free() は API の 
HeapAlloc() / HeapFree() を使ってます」
『それが間接的に使ってるってことなのね』
「ランタイムも結局は API を使っているっていうのは重要なことだから、
いつも気にとめておいてね。で、もうひとつの重要なこと。こっちの方が重
要なことなんだけど」
『うん』
「実は、各 API には互換性がありません」
『へ？』
「たとえば、 VirtualAlloc() で確保したポインタを GlobalFree() で解放し
ようとすると」

void UseVirtualAllocAndGlobalFree()
{
    // このデータが入る領域を確保します。
    const char *const DATA = "あいうえお";

    // メモリを確保。
    char *pch
        = (char *)VirtualAlloc
                ( 0
                , strlen( DATA ) + 1 
                , MEM_COMMIT
                , PAGE_EXECUTE_READWRITE
                );

    // コピーしてから出力。
    strcpy( pch, DATA );
    TRACE( "%s\n", pch );

    // 解放……できません。
    GlobalFree( pch );
}

『げ、なんか出た！』

例外処理 (初回) は StringTest.exe (NTDLL.DLL) にあります: 
0xC0000005: Access Violation。

「これは、 VirtualAlloc() で確保したポインタは、 GlobalFree() でアク
セスできないってこと。というか、たぶん中に情報がないんじゃないかな」
『情報？』
「実は、ポインタだけじゃ、確保した領域のサイズがわからないんです」
『 GlobalAlloc() とかで確保したサイズがわからない？』
「そう。だから、 GlobalAlloc() とか VirtualAlloc() した時に、そのポ
インタと一緒に確保したサイズを取っておくおんだけど、その情報は 
GlobalAlloc() と VirtualAlloc() とでは別だから」
『どのサイズ解放すればいいのかわからない、と』
「というわけで、実は確保する関数と解放する関数はセットにしなきゃいけ
ないんです。というわけで次回に続く！」

/*
    Preview Next Story!
*/
『あのさ、〈他のアプリのツリーコントロール〉ってやつ』
「 VirtualAlloc() 使うのだね」
『そういうののやり方は教えてくんないの？』
「そういうのまで教え始めるときりがないから……」
『でも、ちょっとやってみたい』
「やり方自体は検索すればみつかると思うよ」
『ぐぐれってことね』
「というわけで次回」
＜ Version 11.11 コンストラクタとデストラクタ ＞
『につづく！』
「で、僕はどんなサイトを見ても理解できる基本技術を教えるから」
『最終的にはその方がいい？』
「もちろん」


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

・ほとはー１話追加予定
　三人合体ホットハーブに引きつづき１話追加予定です。

・KAB-studio.h 縮刷版更新
　KAB-studio.h が２１０号になるので縮刷版を更新します。ってゆーか本
当は先週にするはずだっただけど夏コミ情報を優先してしまいました、ごめ
んなさい。今回は大丈夫です。


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

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

