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

    KAB-studio.h


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

    送信日： 2005/07/04(Mon) No.314
    配信数： 1892
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

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

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

2005/07/04 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
12.08 TEXT と BYNARY
12.09 バイナリーモードで書き込む！
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


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

2005/06/26 (Sun)
　午前中はアニメ見ながら明日の分を更新。午後５時までカブカテキョをす
るかしまいか悩む。国民健康保険高過ぎ！　カブカテキョ始めます。そのあ
とカブカテキョのページを作成、かぶヘッダー送信予約、某専門学校の
テキスト書き。某専門学校……。そして起業した人。

2005/06/27 (Mon)
　FMVME5555E が来たので Fedora Core 2 をインストールしようとしたら途
中で失敗。３時に歯医者。その後秋葉原に直行。 PC100 SDRAM 128MByte を
２枚購入。メモリ差して Fedora Core 2 をインストール、無事完了。これと
平行してテキスト書きも。

2005/06/28 (Tue)
　午前中は洗濯。暑くて体が……。午後は JavaA2Z の単語追加。ヒット数
なかなか増えない……。国民健康保険の減免は駄目。 JavaA2Z 系のコンテ
ンツでいかに収益を上げていくか。夏コミにほとはー外伝３を出さない可能
性大。そして大もうけ。

2005/06/29 (Wed)
　朝にタイマー掛けたら逆に寒すぎて死ねる。午後に JavaA2Z 単語追加。
負荷は高くない……。ぷらとわ１話と、１０周年記念の文章を。某専門学校
のテキスト書きで「仕事してる感」が。そして生活保護。

2005/06/30 (Thu)
　すんごく眠くて何もできず。一応お昼に JavaA2Z 単語追加とかテキスト
書きとか。このテキストと明日のカブカテキョ開始でストレスが？　明日で
かぶスタ１０周年。

2005/07/01 (Fri)
　祝・かぶスタ１０周年！！　その１０年の歴史と想いをつらつらと。祝辞
ありがとうです。今日一日は密度高い一日。かぶヘッダーの準備とか来週の
分の準備とか。３時に歯医者。帰ってからはカブカテキョとか Java-ZXY の
ラフとか。そしてナルコレプシー？

2005/07/02 (Sat)
　エアコン付けて二度寝して凍死。カブカテキョの質問回答、 JavaA2Z の
単語登録とかとか。夜は月例バックアップ。ずっとずっと取ってある。でも
逆に捨てられないってこと？


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

2005/06/26 (Sun)
http://d.hatena.ne.jp/kab_studio/20050626
起きたかな。
[ほとはー]ほとはー外伝３ P.24
風雅、舞い追加。
[Prog]ぷらとわ追加。
[アニメ]ゾイド ジェネシス 第12話「潜入」
[アニメ]魔法戦隊マジレンジャー ……はお休み。
[アニメ]おねがいマイメロディ 第13話「心がとけたらイイナ！」
[アニメ]交響詩篇エウレカセブン 第11話「イントゥー・ザ・ネイチャー」
[カブカテキョ]ひっそりとサービス開始へ。

2005/06/27 (Mon)
http://d.hatena.ne.jp/kab_studio/20050627
起きた。
sakusaku (残り4日)
[アニメ]まほらば 第25話「告げる夜」
[アニメ]まほらば 第26話「まほらば」(終)
[アニメ]ぱにぽにだっしゅ！ 第0話「次回予告」
[買][装備][Fedora]FMVME5555E
[Fedora] FMVME5555E に Fedora Core 2 をインストール
そろそろ歯医者。
帰ってきた。
[病気治療]歯医者
[買][Fedora]秋葉原で買ってきたもの。
ホットペッパーCM集
[JavaA2Z]単語追加。
[Fedora]FMVME5555E に Fedora Core 2 をインストール(2)
[Machician]第８話 アイとコイと (11) [△ ▽]

2005/06/28 (Tue)
http://d.hatena.ne.jp/kab_studio/20050628
疲れた……。
[アニメ]勇者王ガオガイガーFINAL 
　第12話「神話!!!（マイソロジー）」(終)
[Fedora]Fedora Core 2で Samba 。
[アニメ]こみっくパーティーRevolution 第13話「As Time goes by」(終)
[JavaA2Z]単語追加。
[辞職]国民健康保険の減免はできませんでした……。
[ほとはー][C68]夏コミに本、出さないかも……。
[Prog] Struts のシェアは本当に高いのだろうか。
[Java-ZXY]ヒロインラフ
闇のイージス映画化？？？
[Machician]第８話 アイとコイと (12) [△ ▽]

2005/06/29 (Wed)
http://d.hatena.ne.jp/kab_studio/20050629
さみぃいいいいい！！！
[アニメ]攻殻機動隊 S.A.C. 2nd GIG 第13話「左眼に気をつけろ」
[アニメ]かみちゅ！ 第1話「青春のいじわる」
[JavaA2Z]負荷は高くなさそう。
[買]まんがタイムきららMAX
[JavaA2Z]単語追加。
映画公開に待った　
　人気マンガ「クロマティ高校」　クロマティさん「名前使うな」
[JavaA2Z]右下の広告をどうしよう。
[Machician]第８話 アイとコイと (13) [△ ▽]

2005/06/30 (Thu)
http://d.hatena.ne.jp/kab_studio/20050630
起きたよ。
CLANNAD クラナド 古河 渚 (1/8 PVC塗装済み完成品)
[アニメ]魔法先生ネギま！ 第26話(終)
[アニメ]極上生徒会 第13話「敵か味方かみなもちゃん」
[JavaA2Z]単語追加。
[アニメ]LOVELESS 第12話「ENDLESS」(終)
[Machician]第８話 アイとコイと (14) [△]

2005/07/01 (Fri)
http://d.hatena.ne.jp/kab_studio/20050701
かぶスタ10周年！
ハローエブリにゃん。
sakusaku(終)
[アニメ]フタコイ オルタナティブ 第13話「3人でいたい」
そろそろ歯医者。
[病気治療]歯医者
[JavaA2Z]単語追加。
[Java-ZXY]ヒロインラフ
[Machician]第８話 アイとコイと (15) [△]

2005/07/02 (Sat)
http://d.hatena.ne.jp/kab_studio/20050702
起きて！
[アニメ]ふしぎ星の☆ふたご姫 
　第13話「プーモの修行☆ケンカしちゃったふたご」
[アニメ]シュガシュガルーン 第1話「チョコとハートの流れ星」
[JavaA2Z]単語追加。
[アニメ]絶対少年 第7話「三度めの約束の夜」


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

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

「お前は、人を殺したことがあるか」
「……」
　雅樹が一歩進む。
　少年が一歩下がる。
「質問を変えよう」
　雅樹が嫌らしく笑う。
「お前は、自分の膀胱を見たことがあるか？」
「？……」
「膀胱だ、膀胱」
　雅樹が自分の下腹部を指さす。
「お前、ＡＰなんだろ？　死なないんだろ？　なら、ナイフで腹かっさばい
て、内臓くらい見たことあるだろ」
「……」
　ない。
　考えたことも、ない。
　考えることすら、できない。
「な、何を言って……」
「ある日なー、食いもんがなくて、すんげー腹減ってて、そしたら包丁が
あって、思い付いちまったんだよ」
「……」
「さくっと開いてな、血溜りの中膜割いて、引き出すんだ。釣られてアレ
とかも引っ込むんだぜ？」
「……」
「それをスライスするんだ。あぶると結構いけるんだよ。焼酎と合うん
だ」
「……ちっ、黙れよ！」
　少年は下がるのを止めて、止まり、雅樹へと跳ぶ。
「っ」
　その足を、止める。
　刀が、目に入った。
　ただそれだけのこと。
　それが。
　少年に、想像を、させて、しまい、
「そうだ、そこで待っていろ。今お前にも食わせてやるから」
「っっ」
　少年が一歩下がる。
「白炎」
　白い風が少年を包み、宙に浮いたと思った瞬間。
「え」
　その腹部を、刀が、斬り刺していた。
「ごか〜いちょ〜」
　雅樹は、舌なめずりをした。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
　しん、と静まりかえっていた。
　誰もが、箸を持つ手を止めていた。
「あの状態は、僕の封印魔法で一時的に動きを止めている状態です。早けれ
ば9月1日に封印を破り、再び動き出します」
　その場にいる全員が、息を飲む。

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

■追加・更新単語

java.sql.Date
Timestamp
ハンドラ
リスナー
エラーハンドラ
execute
JRE
ルート
木構造
ツリー構造
ZIP
java.lang
java.util
StringTokenizer
ディレクトリ
カレントディレクトリ
フォルダ
カレントフォルダ
パス
絶対パス
フルパス
相対パス
..
ディレクトリトラバーサル
クラスパス
ビルドパス


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


　Version 15.14
自作 DLL を実行中リンクしてみる

「前回は DLL を実行中にリンクして、好きな関数を呼び出す、っていうの
をしてみました」
『あんなふうに使うと、リンクとか必要ないのねー』
「関数の呼び出しが特殊だからね。前回のプログラムをもう一度見てみよう
か」

// 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;
}

「関数を呼び出している」

        pfnMessageBox( NULL, "テスト", "テストダイアログ", MB_OK );

「が、関数ポインタを使って呼び出しているから、リンクの必要がない、と
いうかしようがないんです」
『こういう形なら、関数を呼び出してもリンクする必要がないわけね』
「この方法は【プラグイン】でよく使われます」
『プラグインって、絵を描くのとかでよく使われてるのだよね』
「そう、プラグインの場合、あとから好きな機能を追加できるようにする必
要があります。普通のプログラムの場合、それはリビルドしなきゃできない
でしょ」
『でも、この動的リンク使えば……』
「プラグインは DLL 形式にして、本体の Exe から呼び出す関数名と引数、
戻り値を決めておいて、特定のフォルダにその DLL を置くようにします。 
DLL のファイル名を LoadLibrary() で指定すれば」
『その DLL の関数が呼ばれるってわけねー』
「というわけで、これを自分で作った DLL で試してみます」
『！　なんだか本格的！』
「使う DLL は、 Version 15.10 ( No.310 ) の段階での DLLTestEasy にし
ます」
『プログラムはそのまま？』
「今回はそのまま。 DLLTestEasy.cpp だけ載せるとこんな感じ」

// DLLTestEasy.cpp : DLL アプリケーション用のエントリ ポイントを定義します。
//

#include "stdafx.h"
#include "DLLTestEasy.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}


// これはエクスポートされた変数の例です。
DLLTESTEASY_API int nDLLTestEasy=0;

// これはエクスポートされた関数の例です。
DLLTESTEASY_API int fnDLLTestEasy(void)
{
    OutputDebugString( "fnDLLTestEasy()\n" );
    return 42;
}

// これはエクスポートされたクラスのコンストラクタです。
// クラスの定義については DLLTestEasy.h を参照してください。
CDLLTestEasy::CDLLTestEasy()
{ 
    return; 
}

「今回の例では fnDLLTestEasy() を呼び出します」
『うん、この前呼んだ関数ね』
「まず、これをビルドして作った DLL を BuildTest\Debug フォルダに
コピーしてください」
『つか前もコピーしてるからそのままでいいよね』
「うん、そのままでいいよ。次に、 BuildTest を以下のように修正しま
す」

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

// fnDLLTestEasy()関数ポインタの typedef 。
typedef int (WINAPI *type_pfnDLLTestEasy)(void);

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // DLLTestEasy.dll に実行中リンクします。
    HINSTANCE hInstanceDll = LoadLibrary( "DLLTestEasy.dll" );
    if( hInstanceDll == NULL )
    {
        OutputDebugString( "ＤＬＬをロードできませんでした。" );
        return 0;
    }
    
    // DLLTestEasy.dll の fnDLLTestEasy() 関数の関数ポインタを取得します。
    type_pfnDLLTestEasy pfnDLLTestEasy 
        = (type_pfnDLLTestEasy)GetProcAddress
            ( hInstanceDll, "?fnDLLTestEasy@@YAHXZ" );
    if( pfnDLLTestEasy == NULL )
    {
        OutputDebugString( "関数を取得できませんでした。" );
    }
    else
    {
        // ここで、 fnDLLTestEasy() 関数を呼び出します。
        pfnDLLTestEasy();
    }

    FreeLibrary( hInstanceDll );
    return 0;
}

『前回とほとんど同じね』
「違う所は、まず関数ポインタ」

// fnDLLTestEasy()関数ポインタの typedef 。
typedef int (WINAPI *type_pfnDLLTestEasy)(void);

「この辺は前回と同じ法則で作ってます」
『 MessageBox() よりも引数少ないから楽だね。引数なくても void は付け
るんだ。戻り値とか void ポインタにしか使わないと思ってたんだけど』
「本当は、関数に引数がないときは、引数に void って書くんです。ただ、
それは昔のルールで、今はほとんどしないかな」
『そうなんだ。で、次は DLL ね』

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

「 DLL のパスについて補足。 LoadLibrary() は、 DLL を次の順で探しま
す」

1. Exe のあるフォルダ
2. カレントディレクトリ
3. System32 フォルダ
4. System フォルダ
5. ウィンドウズフォルダ
6. PATH 環境変数で設定されたフォルダ

「まぁようするに、 Exe のあるフォルダと WinNT\System32 フォルダの
どっちかに置いとけばいいから。それにフルパスでも指定できるし」
『フルパスＯＫなんだ』
「プラグインの場合にはその方がいいかもね。では最後、関数ポインタの取
得」

    // DLLTestEasy.dll の fnDLLTestEasy() 関数の関数ポインタを取得します。
    type_pfnDLLTestEasy pfnDLLTestEasy 
        = (type_pfnDLLTestEasy)GetProcAddress
            ( hInstanceDll, "?fnDLLTestEasy@@YAHXZ" );

『……？？？？？』

?fnDLLTestEasy@@YAHXZ

『って何！？　なんで関数名がこんな変なの！？　これバグってない？』
「バグってると思う？」
『……ビルドして実行……あ、〈fnDLLTestEasy()〉って出た』
「というわけで次回に続く！」

/*
    Preview Next Story!
*/
『何あの変な関数名！！』
「エクスポートするとああいう名前になるんです」
『ええーっ！？　だって MessageBox() は普通だったじゃん！』
「それは、エクスポートの方法が違うから」
『方法……っていっぱいあるの？』
「というわけで次回」
＜ Version 15.15 さまざまなエクスポート ＞
『につづく！』
「この辺は MSDN にも載ってないから難しいよー？」
『ぐぐったら Codian ってとこに載ってたよ』
「あ、いや、それは……」


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

