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

    KAB-studio.h


    (C)KAB-studio 1999 - 2005 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2005/06/27(Mon) No.313
    配信数： 1907
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// NEW!!
http://www.kab-studio.biz/index.html

2005/06/27 (Mon)
　カブカテキョ、サービス開始へ。
　規定人数に達しませんでしたが、サービスを開始することになりました。
　プログラミングの家庭教師が欲しいという方、是非ご登録ください。
[ カブカテキョ ]
http://www.kab-studio.biz/Katekyo/index.html

2005/06/27 (Mon)
　ほとはー外伝３にP.24を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html

2005/06/27 (Mon)
　風雅、舞い ホームページ版にアーカイブ追加！
第十一章 ＡＰ
[ 風雅、舞い ]
http://www.kab-studio.biz/Novel/Fuga/index.html

2005/06/27 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
12.06 double の中身・仮数部編
12.07 浮動小数点のまとめ
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


////////////////////////////////////////////////////////////////////
// ちょお普通な日記
http://www.kab-studio.biz/nikki2/index.html

2005/06/19 (Sun)
　午前中は洗濯。午後は明日の分の更新。ぷらとわ書きためるの結構大変。
カブカテキョの締め切りは明日。人数が達しなかったらキャンセルします。
そして激疲れ。

2005/06/20 (Mon)
　カブカテキョ、中止に。某外資系IT企業、不採用に。うう。でもこの段階
で不採用で良かったかも？　２５日に、どうするか決めるかも。今は貧乏で
も時間が欲しい。２時半までカブカテキョまわり。４時に歯医者。仮眠取っ
てから、萌えJava本。もうそろそろ諦めた方がいい？

2005/06/21 (Tue)
　今日はなんか全然できず。プロジェクターのランプは切れるし。マンショ
ンの管理人さんは来るし。自営方向に傾く。そして時持ち。そして諦めなけ
れば負けたことにはならない。

2005/06/22 (Wed)
　１０時半起き。午前中に JavaA2Z 単語追加。午後はほとはー外伝３。
５時半にヨドバシ川崎店まで散歩して Java の入門書を購入。帰りに本屋で
げんしけん６巻購入。帰ってきたらテレビが壊れてた……。

2005/06/23 (Thu)
　深夜３時半からのコンフェデレーションズカップ日本対ブラジル戦をしっ
かり観て、寝て１時に起きる。今日は早めに寝ます。液晶プロジェクターの
ランプがやっと来た。そしてライフライン。そしてゲストをいっぱい集めた
同人誌。

2005/06/24 (Fri)
　昨日は１時半に寝たのになんか眠れず。１１時５０分から歯医者。３時に
新宿の某専門学校でお仕事関係のお話を。テキスト書いたりインストラクター
したりすることになりそう。帰ってきたらかぶろぐに BlogPet を。ひましゆ
をかわいがってあげてください。

2005/06/25 (Sat)
　午前中はぐだーっと。午後に JavaA2Z の単語追加とあさっての準備。夕
方に横浜に行ってコミックスと、ソフマップでパソコン購入。９６００円だ
けど。お仕事用。帰ってからはコミックス読んで。収支の整理をしよう。


////////////////////////////////////////////////////////////////////
// かぶろぐ。
http://d.hatena.ne.jp/kab_studio/

2005/06/19 (Sun)
http://d.hatena.ne.jp/kab_studio/20050619
[カブカテキョ]生徒募集中！
起きた〜。
[アニメ]ゾイド ジェネシス 第11話「旅の仲間」
[アニメ]魔法戦隊マジレンジャー……はお休み
[ほとはー]ほとはー外伝３ P.23
風雅、舞い追加。
[Prog]ぷらとわ追加。
[アニメ]おねがいマイメロディ 
　第12話「マイメロちゃんに会えたらイイナ！」
[アニメ]交響詩篇エウレカセブン 第10話「ハイアー・ザン・ザ・サン」
[食]てりやきチキンフィレオ（マクドナルド）
地震だ……。
[JavaA2Z]単語追加。

2005/06/20 (Mon)
http://d.hatena.ne.jp/kab_studio/20050620
[カブカテキョ]生徒募集中！
起きたらしい。
[アニメ]まほらば 第24話「すず」
[アニメ]今晩のテレビ番組（関東）
2:00 勇者王ガオガイガーFINAL（30分遅れ） 
2:15 こみっくパーティーRevolution（これはいつも通り） 
[就職活動]某外資系IT企業……落ちた（爆）。
[アニメ]ふしぎ星の☆ふたご姫 第10話〜第12話
はてなグループを利用した閲覧許可グループ、
　編集許可グループの設定機能について
そろそろ歯医者。
[病気治療]歯医者。
ヒット数増も効果なし？
[Java-ZXY]主役ラフ
先端研
[JavaA2Z]単語追加。
[Machician]第８話 アイとコイと (6) [△ ▽]

2005/06/21 (Tue)
http://d.hatena.ne.jp/kab_studio/20050621
……起きた？
あまかい。
sakusaku
[アニメ]こみっくパーティーRevolution 第12話「立て和樹、世界征服だ」
[JavaA2Z]単語追加。
管理人さん襲来。
ランプ切れた……。
[アニメ]勇者王ガオガイガーFINAL 第11話「命を超える者」
[Machician]第８話 アイとコイと (7) [△ ▽]
[Machician設定]調停委員会メンバーとその服装。

2005/06/22 (Wed)
http://d.hatena.ne.jp/kab_studio/20050622
起きた。
[JavaA2Z]単語追加。
[アニメ]攻殻機動隊 S.A.C. 2nd GIG 第12話「顔」
[装備]テレビ壊れた（汗）。
[買]げんしけん 6巻 特装版
[買]ヨドバシ川崎店で買ってきたもの。
[Machician]第８話 アイとコイと (8) [△ ▽]

2005/06/23 (Thu)
http://d.hatena.ne.jp/kab_studio/20050623
コンフェデ 日本対ブラジル
ってゆーか。
うもー。
[アニメ]魔法先生ネギま！ 第25話
[アニメ]極上生徒会 第12話「それは雨の日に」
[装備]ランプ来た。
[JavaA2Z]単語追加。
はてな社内ミーティングの公開について
コレクション機能の追加について
"まりも"マウス発売
寝ます。
[Machician]第８話 アイとコイと (9) [△ ▽]

2005/06/24 (Fri)
http://d.hatena.ne.jp/kab_studio/20050624
起きた。
そろそろ歯医者。
[病気治療]歯医者。
帰ってきた。
blogpetモジュールの公開について
ブログペットの背景を変更。
CLANNAD、PS2移植決定！
[Machician]第８話 アイとコイと (10) [△]

2005/06/25 (Sat)
http://d.hatena.ne.jp/kab_studio/20050625
起きました。
[買]まんがタイムきららCarat
[JavaA2Z]単語追加。
[アニメ]ふしぎ星の☆ふたご姫 
　第12話「こわ〜い森☆ちょっぴりドキドキの体験」
[アニメ]絶対少年 第6話「世界の被膜が薄くなる」
まだまだみかにハラスメント
[買]横浜で買ってきたもの。


////////////////////////////////////////////////////////////////////
// 風雅、舞い
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十二章　超越する存在　−１８−

「横に跳ねるだけだから力の加減が難しいんだろ。だから一瞬動きが止ま
る」
「……本当に一瞬のはずだけど」
「そうお前が思いたいだけだ。少なくとも、俺と穂香は反応できる時間なん
だよ」
　少年が跳ぶ。
　岩をも砕くかという脚力で三角状に跳び雅樹の背後へと回る。
　雅樹が振り向こうとする。
　刹那。
　少年は角度を変え、最短距離で雅樹へと向かう。
　雅樹は何事も無かったかのようにその動きに合わせて刀を振り降ろす。
「……」
　直前、急制動を掛け雅樹の刀を躱す。目にも止まらぬ速さで右ストレート
が打ち抜かれ雅樹の顔面を捉える。
　雅樹の顔面が粉々に砕ける。
　打ち抜かれた右腕が戻ることなく、宙に舞う。
　斬り上げられた刀が反転し振り降ろされ、少年の右頬を掠める。刀は止ま
らず直角に角度を変え横に薙ぐ。
「ッ」
　少年は堪らず引き、距離を取る。
　宙に舞っていた少年の右腕が、雅樹の目の前に落ちる。
「……不死身っていうのは、本当にやっかいだね。まさかあの状態でカウン
ターを仕掛けてくるなんて、さっきの再現みたいだ」
「舞のと一緒にっ……げふっ、まともに話せねえや」
　と言いつつも、目に見える速さで顔面が修復されていく。
「舞のは無理矢理だが、俺のは自然体だからな。どんな激痛も俺は無効化さ
れるし、どんな傷も瞬時に回復する」
「そして穂香のおかげでどんな状況でも相手を見失うことはない……思うん
だけど、あんた達、本当にヒト？」
「さあな。でも人間ってのは４０年前に捨てた。最近は結構人間を続けれて
たんだが」
　少年が総毛立つ。
「時間も無くなってきたことだし、そろそろ捨てるか」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
「…………悔しい！　なんか悔しいな！　王子のこともそうだけど、先越さ
れたのも悔しい！」
「先って？」
「そりゃもちろん……え？」
「……しまった……」
　紫恋が顔を押さえる。

Machician 第８話 アイとコイと 好評連載中！
[ Machician ]
http://d.hatena.ne.jp/kab_studio/20040823#1093276416
[ Machician＋設定 最新一覧 ]
http://d.hatena.ne.jp/kab_studio/searchdiary?word=*%5BMachician
_______________________________________________________________[KCM]

////////////////////////////////////////////////////////////////////
// JavaA2Z
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語

丸め誤差
桁溢れ
オーバーフロー
バッファオーバーラン
バッファオーバーフロー
バッファアンダーフロー
バッファアンダーラン
桁落ち
アンダーフロー
フォント
ログ
プログラム
ログファイル
煙草
ロガー
Logger
Log4j
ダイアログ
モーダルダイアログ
モードレスダイアログ
メッセージボックス
ダイアログボックス
プログラマー


////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


　Version 15.13
DLL の実行中リンク

「今回は、前回触れた」

・ DLL 内の関数を動的に見つけて呼び出す。

「について説明します」
『この〈動的〉ってのがよく分からないんだけど』
「そうだね、はっきり言ってこれまでの関数の呼び出し方と考え方が違うか
ら、そこをまず押さえておこうか」
『考え方が違う！？』
「 Version 15.11 ( No.311 ) で説明した、 DLL の中の関数を使う方法」

<プロジェクトFrom>
[From.cpp]
呼び出す側
    ↓
    ↓コンパイル
    ↓
[From.obj]
    ↓
    ↓                       リンク (A)
    →→→→→→→→→→→→→→←←←←←←←←←←←←[DLL.lib]
                               ↓
                            [From.exe]

<実行するとき>
[From.exe]
    ↓
    ↓                    実行時リンク (B)
    →→→→→→→→→→→→→→←←←←←←←←←←←←[DLL.dll]
                               ↓
                              実行

「これとは全く違うんです。図で示すとこうなります」

<プロジェクトFrom>
[From.cpp]
呼び出す側
    ↓
    ↓コンパイル
    ↓
[From.obj]
    ↓
    ↓リンク
    ↓
[From.exe]

<実行するとき>
[From.exe]
    ↓
    ↓実行中
    ↓
    ↓ DLL を直接ファイル名で指定してリンク←←←←←←←←[DLL.dll]
    ↓
    ↓ DLL 内の関数を名前で指定して呼び出し。
    ↓
   終了

『え…… DLL を使うのに、ライブラリファイルのリンクとか、実行すると
きのリンクが必要ないの！？』
「そういうこと。これまで紹介してきた方法は、 DLL を〈実行開始時〉に
リンクしていました。でも今回紹介する方法は、好きな DLL を〈実行中〉
にリンクして、好きな関数を呼び出すことができるんです」
『ええーっ！？　だって、だって関数を呼び出したら、その関数が入ってる
ライブラリファイルを指定しなきゃ、リンクエラーになるじゃない！』
「そう、だから、関数を普通に呼び出すんじゃないんです」
『普通に呼び出さない……？』
「ま、実際に見てもらった方が早いでしょ。今回は、前回説明した」

// Main.cpp
#include <Windows.h>

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    MessageBox( NULL, "テスト", "テストダイアログ", MB_OK );
    return 0;
}

「を方法を変えて実現します」
『 MessageBox() を呼び出すってこと？』
「そういうこと。実際にプログラムを見てもらおうか」

// Main.cpp
#include <Windows.h>

// MessageBox()関数ポインタの typedef 。
typedef int (WINAPI *type_pfnMessageBox)
    ( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // user32.dll に実行中リンクします。
    HINSTANCE hInstanceDll = LoadLibrary( "user32.dll" );
    if( hInstanceDll == NULL )
    {
        OutputDebugString( "ＤＬＬをロードできませんでした。" );
        return 0;
    }
    
    // user32.dll の MessageBoxA() 関数の関数ポインタを取得します。
    type_pfnMessageBox pfnMessageBox
        = (type_pfnMessageBox)GetProcAddress
            ( hInstanceDll, "MessageBoxA" );
    if( pfnMessageBox == NULL )
    {
        OutputDebugString( "関数を取得できませんでした。" );
    }
    else
    {
        // ここで、 MessageBox() 関数を呼び出します。
        pfnMessageBox( NULL, "テスト", "テストダイアログ", MB_OK );
    }

    FreeLibrary( hInstanceDll );
    return 0;
}

『ビルドして実行……！　本当にダイアログ出た！　なんで！？　
MessageBox() 呼んでないのに！』
「それを説明していきます。まずは DLL の実行中リンク。 MessageBox()
関数は、 user32.dll に入ってます」
『 MSDN に user32.lib がライブラリファイル、って書かれてたから？』
「そう。 MSDN を見てどの API がどの DLL に入っているか調べます。
DLL が分かったら、その DLL を実行中にリンクします」

    // user32.dll に実行中リンクします。
    HINSTANCE hInstanceDll = LoadLibrary( "user32.dll" );

『 LoadLibrary() って API ？』
「そう、この API は DLL を実行中にリンクします。普通は実行開始時に自
動的にリンクされる DLL を、ここでファイル名を直接指定して、好きな
DLL をリンクすることができるんです」
『ファイル名って、"user32.dll" のこと？』
「そう。ここではファイル名だけだから、 System32 フォルダ内の DLL が
探されるけど、フルパスで指定することもできるから」
『そっか、 Windows の DLL じゃなくてもいいってことね』
「 DLL が見つかると、その DLL のインスタンスハンドルが返されます」
『インスタンスハンドルって Version 8.02 ( No.144 ) でやったね。
あれ？ でも DLL でもインスタンスなの？』
「その回を読み返してみて。インスタンスハンドルって、アドレスのこと
だったでしょ。実行中リンクした DLL も、メモリ上に置かれるから」
『その置かれたアドレス！』
「そういうこと。この DLL のインスタンスハンドルを使って、 DLL 内の
関数を探します。それがこれ」

    // user32.dll の MessageBoxA() 関数の関数ポインタを取得します。
    type_pfnMessageBox pfnMessageBox
        = (type_pfnMessageBox)GetProcAddress
            ( hInstanceDll, "MessageBoxA" );

『な、なんか難しいです！』
「ひとつひとつ見ていこうか。まず GetProcAddress() 」
『 API ？』
「そう。この API で、第１引数で指定した DLL の中から、第２引数で指定
した関数を探します」
『第１引数はさっきのインスタンスハンドルね。第２引数は MessageBoxA
って、なんかちょっと違うような……』
「 A については Version 11.06 ( No.206 ) を読み返して」
『あ！　そっか、 API って A がついてるのと W がついてるのがあって、
マクロで切り替わってたんだ』
「普段は MessageBox() を使ってるけど、これはマクロで実際には
MessageBoxA() か MessageBoxW() に切り替わってるわけ。 DLL に入ってい
る実際の関数は」
『 MessageBoxA() と MessageBoxW() だから、この名前で指定しなきゃいけ
ないんだ……って、それってどうやって調べればいいの！？』
「ヘッダーファイル見るしかないね。ま、基本的に API はこうやって呼ぶ
ものじゃないから……」
『確かに、動的に呼び出すってなんか特殊な感じ……と、変数に戻り値入れ
てるとこ説明して』
「そうそう。 GetProcAddress() は、関数の関数ポインタを返します。関数
ポインタについては Version 13.17 ( No.253 ) とかを読み返してみて」
『関数のアドレスを入れるポインタなんだよね、この比較関数とか、あと
ウィンドウプロシージャに使うの。そか、その関数ポインタを受け取れば、
関数が呼び出せる！』
「そういうこと。関数ポインタは、まずこのように typedef で型として
定義しておきます」

// MessageBox()関数ポインタの typedef 。
typedef int (WINAPI *type_pfnMessageBox)
    ( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );

「これはこうなっています」

typedef 戻り値 (呼出方 *型名)(引数);

『変数の時とほとんど同じね』
「この変数として pfnMessageBox っていう変数を作って、
GetProcAddress() の戻り値をキャストしたものを格納します」
『これで MessageBoxA() の関数ポインタが入ったの？』
「入ってなければ NULL が格納されるから。ちゃんと入ってれば」

        // ここで、 MessageBox() 関数を呼び出します。
        pfnMessageBox( NULL, "テスト", "テストダイアログ", MB_OK );

『で、 MessageBox() と同じように呼び出せる！！』
「呼び出したら、終了処理をします」

    FreeLibrary( hInstanceDll );

『リンクした DLL を解放するんだ』
「こうすることで、好きな DLL の好きな関数を呼び出せるわけです」

/*
    Preview Next Story!
*/
『なんだかこれまでの概念が……』
「でもこういうのができるようになるととたんに面白くなるよ」
『そなの？』
「好きなように機能が切り替えられるようになるでしょ」
『あー、確かにパーツ切り替えみたいな？』
「ま、その切り替えがうまくできないこともあるんだけど」
『？』
「というわけで次回」
＜ Version 15.14 自作 DLL を実行中リンクしてみる ＞
『につづく！』
「ここからまた一筋縄じゃいかないよー」
『また怖がらせてー、殴るよ？』


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

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


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

    (C)KAB-studio 1999 - 2005 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

