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

    KAB-studio.h


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

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

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

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

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

2005/06/06 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
11.23 文字列編まとめ
12.01 文字列じゃない世界
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


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

2005/05/29 (Sun)
　夏コミ当選してました！　日曜日（８月１４日） 東 モ-43bです。サーク
ル名は「KAB-studio」。あまかいヘルプ作り。今日の夜中は JavaA2Z の広
告作り。そして某大手外資系企業？　そしてコミケで売る本はどうなるの？

2005/05/30 (Mon)
　雨で体が軋む……。部屋の片付け。もう一室欲しいなぁ。３時から歯医者
でがりがり削られる。松屋のスープカレー。そして Flash 。そしてブログ
のリンク。

2005/05/31 (Tue)
　昨日の夜中はあまかい広告作り。５月はあまかいで充実してたような。
６月は就職活動しつつ貯まってるゲームを終わらせたい。 JavaA2Z も
あまかいも、芽が出るまでもう少しかかりそう。そして訂正。

2005/06/01 (Wed)
　Machician 第９話を半分書いたり、ほとはー外伝３のネームを３ページ
切ったり。ほとはー外伝３は夏コミには第二部までになるかも。胃の不快感
が。逃避モード。そして酢。

2005/06/02 (Thu)
　ほとはー外伝３のネームを６ページ。第二部までを「前編」にします。
冬コミに後編を。がりがり食っちゃった。そしてストレス？

2005/06/03 (Fri)
　明日の某社就職説明会の準備。履歴書はプリントアウトで。職務経歴書は
これまでのテンプレートを元に。自分の能力の低さが目に見えてくる。横浜
でビジネスカジュアルな服を……買わず。めん創 桜花でつけ麺を食べる。
昨日の夜中にほとはー外伝３のネーム描き上がった。

2005/06/04 (Sat)
　肉体的にだけじゃなく精神的にも疲れた……。サッカー日本対バーレーン
戦を見つつ履歴書書き直し。２時に某外資系IT企業の就職説明会。
ビジネスカジュアル、少な。普通の企業説明。最後の質問でダウナーに。
明日からまた頭を切り換えよう。


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

2005/05/29 (Sun)
http://d.hatena.ne.jp/kab_studio/20050529
起きた。
[アニメ]ゾイド ジェネシス 第8話「地下水路」
[アニメ]魔法戦隊マジレンジャー 第16話「門の鍵〜ウザーラ・ウガロ」
[ほとはー]ほとはー外伝３ P.20
風雅、舞い追加。
[Prog]ぷらとわ追加。
[C68]夏コミ受かりました！！
[C68]ねこのしっぽ様入稿締切一覧
[アニメ]おねがいマイメロディ 第9話「縄とびたくさん跳べたらイイナ！」
[JavaA2Z]単語追加。
[あまかい]正式にサービススタート！
やべぇ……。

2005/05/30 (Mon)
http://d.hatena.ne.jp/kab_studio/20050530
あれだ、起きたんだよ。
かぶろぐ一周年。
[アニメ]まほらば 第22話「大事…」
[JavaA2Z]単語追加。
[病気治療]歯医者。
[C68]当落通知来ました。
[食]松屋・スープカレー
[Machician]第７話 灰色の鬼、白き翼 (16) [△ ▽]

2005/05/31 (Tue)
http://d.hatena.ne.jp/kab_studio/20050531
超起きた。
[アニメ]勇者王ガオガイガーFINAL 第8話「ねがい星、かなえ星」
[アニメ]こみっくパーティーRevolution 第9話「史上最大の血戦」
[あまかい]あまかい広告（かぶろぐ用）
[あまかい][JavaA2Z]あまかい広告（JavaA2Z 用）
[JavaA2Z]単語追加。
Windows 2000向けIE7はなし
[買][アニメ]テレビ版AIR DVD 第3巻 初回限定版
[JavaA2Z]単語そのものもSEOを考えるべきか？
[Machician]第７話 灰色の鬼、白き翼 (17) [△ ▽]

2005/06/01 (Wed)
http://d.hatena.ne.jp/kab_studio/20050601
そう起きた。
[アニメ]攻殻機動隊 S.A.C. 2nd GIG 第9話「イカレルオトコ」
[食]セブンイレブン 贅沢仕立てのビーフカレー
珍犬：２本足で立ったまま１キロも散歩
[買]本屋で買ってきたもの。
[就職活動]ビジカジ。
地震！
[JavaA2Z]単語追加。
[Machician]第７話 灰色の鬼、白き翼 (18) [△ ▽]

2005/06/02 (Thu)
http://d.hatena.ne.jp/kab_studio/20050602
起きた。
[アニメ]極上生徒会 第9話「好きはとまらない」
「名探偵コナン」声優と原作者が結婚！
[JavaA2Z]単語追加。
[アニメ]交響詩篇エウレカセブン 第7話「アブソリュート・ディフィート」
PS2版「極上生徒会」がついに公開！
はてなTシャツ欲しい！
にゅーあきばどっとこむはどうしちゃったんでしょう。
[JavaA2Z]ちょっとは有名になってきたかな？
[Machician]第７話 灰色の鬼、白き翼 (19) [△ ▽]

2005/06/03 (Fri)
http://d.hatena.ne.jp/kab_studio/20050603
起きてるの。
[ほとはー]ほとはー外伝３ネーム
[JavaA2Z]単語追加。
[アニメ]「劇場版AIR」を試聴。
筋トレ機能付きマウス登場
エゴグラム
あああ……。
[就職活動]履歴書＆職歴書書き。
帰ってきた。
[食]めん創 桜花
アジア最終予選 日本対バーレーン戦
[Machician]第７話 灰色の鬼、白き翼 (20) [△]
[Machician]第７話あとがき

2005/06/04 (Sat)
http://d.hatena.ne.jp/kab_studio/20050604
起きた……かも。
[アニメ]ゾイド ジェネシス 第9話「温泉の村」
[アニメ]魔法戦隊マジレンジャー 第17話「優しさはいらない〜ウーザ・ドーザ・ウル・ウガロ〜」
準備中。
帰ってきた。
[就職活動]某外資系IT企業・就職説明会
Google、Webインデックス強化の新ツールβ公開
爆笑オンエアバトル


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

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

「真空……」
　リシュネを、真空が包む。水槍はその空間に突き刺さった瞬間霧散し、水
分はその外へ追いやられる。
　舞はその中のリシュネを視認する。肌が切り裂け、その表情は鬼の形相。
真空をＡＰとしての身体能力だけで乗り切ろうとしていた。
「……なら貫くだけ！！」
　外を巡る水分を一箇所に集中させようとしたその時、リシュネは急降下す
る。
「っ！」
　そしてそれは木々の中に隠れてしまう。真空に巻き込まれた森が、何かに
租借されるように音を立てて瓦解していく。そして。
「……」
　場所が、分からない。
　真空となっている空間の大きさが、とてつもなく広くなっている。
　水の力で形を読むが、その形もすでに球形ではなくなっている。この中の
どこにリシュネがいるのか、把握することは不可能だった。
　どうする？
　無理矢理にでも攻撃して崩す？
　視認できる距離まで近づく？
　守りに入って時間を稼ぐ？
　あの状態はダメージが大きいはず、なら持久戦に持ち込んだ方がいい。
　水榴を身にまとい、真空となっている領域を把握しつつ後退する。
「！！」
　突然の衝撃波。
　地を奔る２本の縦波。視認を自覚した直後は既に目の前、両手をかざし全
ての水榴で楯を作り受け止める。
　声にならない声と共に舞の体が弾け飛ぶ。木々の中を鳥のように舞う中
で、水から得た情報は、おおよその射撃位置を把握していた。
「発破」
　真空空間の中央、その地面が突然吹き上がり、形を崩す。宙に吹き上げら
れたリシュネを、水の槍は射抜いた。
　ホーンが鳴り、勝敗が決したことを告げた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
「いっそのこと、これ、町の名物にでもしますか」

Machician 第８話 第８話 影、闇を睨む 13日からスタート！
[ 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

■追加・更新単語

コネクション
Connection
イベントリスナー
イベント
MVC
ステートメント
コメント
//
/*
*/
コメントアウト
エントリーポイント
コンポジション
委譲
論理和
論理積
排他的論理和
集約
対数
グローバル
グローバル変数
NoClassDefFoundError
デクリメント
--演算子
--
ポストデクリメント演算子
プリデクリメント演算子
シグネチャー
ロケール
Locale
プロパティ
プロパティファイル
リソースバンドル
Properties
ResourceBundle


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


　Version 15.10
エクスポートとインポート

「前回はとりあえず DLL を作って使ってみました」
『あれだけ見ると結構簡単だったんだけど……』
「あれは全部下準備ができているからね。というわけで、今回はその必要な
下準備とかについて見ていきます」
『お〜』
「ではひとつずつ見ていきます。まず DllMain() 関数から」

// DLLTestEasy.cpp

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

『うん、こういう関数あるね』
「これは DLL が読み込まれたときに呼び出される関数。 WinMain() みたい
な感じかな」
『え、これが WinMain() の代わり！？』
「一応ね」
『一応？』
「だって、 DLL が読み込まれたときに呼び出される、って言っても、その
時に必要な処理ってほとんどないから。普通は Exe から関数が呼び出され
るだけだもの」
『そっか、 Exe とは違うんだものね……』
「だから、これは無視しちゃってください」
『無視ですか』
「次に関数について」

// DLLTestEasy.cpp

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

『これを Exe から呼んでたんだよね』
「そうです。基本的にこの関数は普通の関数と同じ。ただひとつ違うのは」
『 DLLTESTEASY_API ってゆーのが付いてる』
「そう。これはヘッダーファイルの方で定義されています」

// DLLTestEasy.h

#ifdef DLLTESTEASY_EXPORTS
#define DLLTESTEASY_API __declspec(dllexport)
#else
#define DLLTESTEASY_API __declspec(dllimport)
#endif

『？？？？』
「 #ifdef って憶えてる？」
『マクロだよね、 #define でこれ定義してたら、ってゆーの。 
Version 6.06 ( No.106 ) でやったし』
「そう、だからこれを分かりやすく書くと」

#ifdef DLLTESTEASY_EXPORTS
    // もし DLLTESTEASY_EXPORTS が #define されていたらこっち。
    #define DLLTESTEASY_API __declspec(dllexport)
#else
    // それ以外はこっち。
    #define DLLTESTEASY_API __declspec(dllimport)
#endif

「ということになります」
『ってことは……』

// DLLTESTEASY_EXPORTS が #define されている場合
__declspec(dllexport) int fnDLLTestEasy(void)
{
    OutputDebugString( "fnDLLTestEasy()" );
    return 42;
}

『か、』

// DLLTESTEASY_EXPORTS が #define されていない場合
__declspec(dllimport) int fnDLLTestEasy(void)
{
    OutputDebugString( "fnDLLTestEasy()" );
    return 42;
}

『ってことだよね。違うのは dllexport か dllimport か、ね』
「そうなります。それともうひとつ、ヘッダーファイルにも」

// DLLTestEasy.h

DLLTESTEASY_API int fnDLLTestEasy(void);

『あ、関数宣言の方だね。これも』

// DLLTESTEASY_EXPORTS が #define されている場合
__declspec(dllexport) int fnDLLTestEasy(void);

『か』

// DLLTESTEASY_EXPORTS が #define されていない場合
__declspec(dllimport) int fnDLLTestEasy(void);

『だね』
「実は、この違いは、関数宣言の方で大きな意味を持ちます」
『関数宣言の方？』
「そう。さて問題。 DLLTESTEASY_EXPORTS はどこで #define されているで
しょう」
『え……？　……あれ、ソースファイルやヘッダーファイル見てみたけどな
いよそんなの』
「そう、実は設定にあるんです」
『設定？？』
「【プロジェクト】-【設定】ダイアログの【C/C++】-【一般】ページの
【プリプロセッサの定義】に」
『あ！　DLLTESTEASY_EXPORTS がこんなとこに！　しかも #define じゃな
いし！』
「この設定に書いてある文字列は、 #define と同じ意味を持つんです。普
通にプログラムに #define で書くよりは簡単だから」
『でも探すの大変……』
「さて、ここで DLLTESTEASY_EXPORTS が定義されているって事は？」
『んー、ってことは関数もその宣言も、』

// DLLTESTEASY_EXPORTS が #define されている場合
__declspec(dllexport) int fnDLLTestEasy(void)
{
    OutputDebugString( "fnDLLTestEasy()" );
    return 42;
}

// DLLTESTEASY_EXPORTS が #define されている場合
__declspec(dllexport) int fnDLLTestEasy(void);

『の方、ってそれじゃわざわざマクロ使う必要ないじゃん！』
「このプロジェクトではね」
『このプロジェクトでは……？』
「ヘッダーファイルの方は？」
『ヘッダーファイルは……あ！　 BuildTest からも見てる！』

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

#include "DLLTestEasy.h"

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    fnDLLTestEasy();
    return 0;
}

『こっちで DLLTestEasy.h をインクルードするときには、さっきの
プロジェクトの設定の #define ってないわけだから』

// DLLTESTEASY_EXPORTS が #define されていない場合
__declspec(dllimport) int fnDLLTestEasy(void);

『になってる』
「つまり、 __declspec() の中が」

・DLLTestEasy : dllexport
・BuildTest   : dllimport

「と、切り替えられるってことです」
『どのプロジェクトから見るかで切り替わる……』
「この切り替わってるのが fnDLLTestEasy() の宣言ってことが重要。この
関数、プロジェクトによって立場が違うでしょ」

・DLLTestEasy : fnDLLTestEasy() そのものがある。
・BuildTest   : fnDLLTestEasy() を呼び出す側。

「それぞれのために、関数宣言の前に __declspec(dllexport) と
__declspec(dllimport) を付けるんです」

・DLLTestEasy : __declspec(dllexport) : Exe から呼び出せるようにする
・BuildTest   : __declspec(dllimport) : DLL のを呼ぶようにする

『呼び出せるように、と呼ぶように……』
「そう、専門用語で」

・DLLTestEasy : __declspec(dllexport) : エクスポート
・BuildTest   : __declspec(dllimport) : インポート

『あ、こっちの方が分かりやすいかも。 DLL では関数を〈外出し〉して、 
Exe では〈取り込む〉ってことなんだ』
「そういうこと。というわけで次回に続く！」

/*
    Preview Next Story!
*/
『プロジェクトによって変わるなんてわけわかんねー！』
「ここは難しいからもう一度説明します」
『っつーか全部説明されてもらってねー！』
「というかちょっと落ち着いて」
『いやーっ、私逃げるー！』
「というわけで次回」
＜ Version 15.11 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
*/
////////////////////////////////////////////////////////////////////

