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

    KAB-studio.h


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

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

////////////////////////////////////////////////////////////////////
// 「カブカテキョ」はじめます。

　プログラミングの家庭教師を始めます。
　メールを使って、皆さんと一対一でプログラミングを教えます。
　皆さんの環境に合わせて教育方針を決めるので、仕事や大学で必要な
技術を身に着けたり、自分のペースで勉強できたりと自由度が高いです。
　「掲示板で訊いたら怒られた」「周りに訊く人がいない」
「鏑矢正伝に教わりたい」というあなた、是非お申し込みください！
（注：有料です）

[ カブカテキョ ]
http://www.kab-studio.biz/Katekyo/index.html

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

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

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

2005/06/13 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
12.02 数字と文字列の変換 
12.03 パソコンは計算機 
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

2005/06/13 (Mon)
　KAB-studio.hの縮刷版を更新！
[ ダウンロードルーム ]
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


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

2005/06/05 (Sun)
　アニメ見つつ明日の更新分を。ほとはー外伝３は背景に苦労。結局明日の
分でいっぱいいっぱい。明日は就職について真面目に考えます。でもめんど
くさい（爆）。

2005/06/06 (Mon)
　月曜は休日モード。ビデオのダビングとか。３時から歯医者。就職につい
て。やっぱ最低月２０万はないと生活できなそう。目標、３５歳（５年後）
に在宅勤務ができるようにして猫と暮らす。 JavaA2z 等のコンテンツで。
それまでの「生活維持費」。案１：まじめに就職。案２：プログラミングの
バイト。案３：テンプスタッフ。案４：教職。案５：デザイン関係。案６：
ウェブ家庭教師。案７：ウェブコンテンツだけで。案８：同人誌。現実逃避
モード。そして生活保護。

2005/06/07 (Tue)
　風雅、舞いの第１２章を書き上げる。えらい長い。ほとはー外伝３描き。
この前の某IT企業で書類選考通過。ウェブ家庭教師もやってみようかなと。
そして大切なもの。

2005/06/08 (Wed)
　徹夜して、朝８時４０分から最後の失業認定日へ。ハローワークカードに
「支給終了」のハンコ。今日はあっさり。失業給付もらえました。失業認定
はこれが最後。ヨドバシ川崎店で苺ましまろプロローグとか購入。日本代表
ワールドカップへ！　頭がぐるんぐるん。

2005/06/09 (Thu)
　最近筋肉痛が。 JavaA2Z は演算子をすべてカバー。 JavaA2Z の検索は
一日に500件あります。プログラミング家庭教師は月5500円で初期定員20人の
予定。広告を一週間貼って定員に達したらサービス開始、とか。そして会社
でワールドカップ。そしてついに大手に？

2005/06/10 (Fri)
　最近変に眠い。来週の更新準備とか。 JavaA2Z の単語数が500に。
ほとはー外伝３の背景を試行錯誤中。そして割引。そして120分。そして
人材派遣。

2005/06/11 (Sat)
　現在１２日午前９時１７分。昨日はクイズマジックアカデミー２の
カロリーメイト杯。あとダーツとか。XBoxのHALOがバランス良くてはまった。
朝８時半くらいに帰宅。とりあえず起きていきます。


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

2005/06/05 (Sun)
http://d.hatena.ne.jp/kab_studio/20050605
起きた……かも。
[アニメ]ゾイド ジェネシス 第9話「温泉の村」
[アニメ]魔法戦隊マジレンジャー 第17話「優しさはいらない〜ウーザ・ドーザ・ウル・ウガロ〜」
風雅、舞い追加。
[Prog]ぷらとわ追加。
[アニメ]おねがいマイメロディ 第10話「ヒーローになれたらイイナ！」
[アニメ]トップランナー 新海誠
[ほとはー]ほとはー外伝３ P.21
[Machician]アーカイブ追加。
[JavaA2Z]単語追加。

2005/06/06 (Mon)
http://d.hatena.ne.jp/kab_studio/20050606
起きたよ。
[JavaA2Z]単語追加。
[アニメ]絶対少年 第3話「名物アナウンサーがやってきた」
[病気治療]歯医者
[JavaA2Z]単語追加。
クローズアップ現代 過労死を防げ〜疲労研究最前線
にゅーあきばどっとこむ復活。
[病気治療]呑気症？

2005/06/07 (Tue)
http://d.hatena.ne.jp/kab_studio/20050607
起きた。
[アニメ]勇者王ガオガイガーFINAL 第9話「我が名はＧ（ジェネシック）」
[アニメ]こみっくパーティーRevolution 第10話「オトモダチからはじめましょ」
[JavaA2Z]単語追加。
active diet おまけ「エアーフライングディスク」
モジット
[就職活動]某外資系IT企業、面接へ。
アドビ「Creative Suite 2」日本語版発表

2005/06/08 (Wed)
http://d.hatena.ne.jp/kab_studio/20050608
起きてますよー。
[ひぐらしのなく頃に]暇潰し編読了。
さて……。
[辞職]失業認定日 4回目
起きた。
[アニメ]攻殻機動隊 S.A.C. 2nd GIG 第10話「草迷宮」
[アニメ]交響詩篇エウレカセブン 第8話「グロリアス・ブリリアンス」
intuos3マーカー
[アニメ][買]苺ましまろ プロローグ
[JavaA2Z]単語追加。

2005/06/09 (Thu)
http://d.hatena.ne.jp/kab_studio/20050609
ロボこみが……。
というわけで起きてます。
[アニメ]魔法先生ネギま！ 第23話
[アニメ]極上生徒会 第10話「彼女に水着をきせないで」
[買]ここ最近買ったもの。
[アニメ]ニニンがシノブ伝 DVD
[JavaA2Z]単語追加。
[買]まんがタイムきらら 7月号
USB「ボスが来た！」ボタン発売

2005/06/10 (Fri)
http://d.hatena.ne.jp/kab_studio/20050610
起きろー。
[JavaA2Z]単語追加。
[買]本屋で買ってきたもの。

2005/06/11 (Sat)
http://d.hatena.ne.jp/kab_studio/20050611
起きました。
行ってくる。


////////////////////////////////////////////////////////////////////
// 風雅、舞い
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

■追加・更新単語

8進数 
ビルド 
再ビルド 
フォーカス 
BigInteger 
strictfp 
volatile 
native 
transient 
const 
goto 
instanceof 
=演算子 
= 
~演算子 
~ 
-演算子 
- 
/演算子 
/ 
+=演算子 
+= 
-=演算子 
-= 
/=演算子 
/= 
%=演算子 
%= 
&=演算子 
&= 
|=演算子 
|= 
^=演算子 
^= 
<<=演算子 
<<= 
>>=演算子 
>>= 
>>>=演算子 
>>>= 
フレーム 
ボタン 
メンバ 
メンバ変数 
メンバ関数 
JavaA2Z 


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

　Version 15.11
DLL の仕組み

「前回はエクスポートとインポートについて説明」
『されてない！　切り替えってのとかはわかったけどよくわかんなかった』
「だね、じゃあもう少し詳しく。まず、ひとつのプロジェクトの中で関数を
呼び出す場合」

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

『うん、こんな感じね』
「次にスタティックリンクライブラリの場合」

<プロジェクトSLL>
   [Func.cpp]
   Function()
       ↓
       ↓コンパイル
       ↓
   [Func.obj]
       ↓
       ↓リンク
       ↓
   [SLL.lib]


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

『ほとんど変わらないね』
「それがスタティックリンクライブラリだからね。ライブラリファイルが
オブジェクトファイルとほとんど同じだから」
『さて、 DLL の場合』

<プロジェクトDLL>
   [Func.cpp]
   Function()
       ↓
       ↓コンパイル
       ↓
   [Func.obj]
       ↓
       ↓リンク
       ↓
 [DLL.lib], [DLL.dll]


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

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

『お、リンクが2回になってる』
「ビルドの時と、実行時の両方のリンクが必要だからね。これまでの
〈リンク〉は〈実行時リンク (B)〉の方に当たります」
『じゃあ〈リンク (A)〉は？』
「そちらは〈仮のリンク〉」
『仮？』
「そう。この例で〈呼び出す側〉は、リンク時に〈Function()〉を〈仮に呼
び出せる状態〉にします。 Function() の本体は DLL.dll に入ってるから
そのままじゃ呼び出せないから」
『だから仮なんだ。で、〈実行時リンク (B)〉の時にちゃんとリンクする、
と』
「その実行時リンクで関数の結び付けをするために必要なのが、前回説明し
たインポートとエクスポート」
『ここで出てくるんだ』
「まず〈リンク (A)〉の時の、ライブラリファイルの意味。 DLL の
ライブラリファイルと、スタティックリンクライブラリのライブラリファイル
は異なるものです」

・スタティックリンクライブラリ : 関数本体がある。
・ダイナミックリンクライブラリ : DLL に結び付ける情報がある。

『 DLL に結び付ける情報……』
「そう、関数本体がない代わりに、〈実行時リンク (B)〉を行う際に、どの 
DLL のどの関数をどうやって呼び出せばいいのか、っていう情報が入ってい
ます。〈リンク (A)〉の段階ではその情報だけを取得して」
『〈実行時リンク (B)〉の時に実際に DLL と結び付ける！』
「そういうこと。この時」

__declspec(dllexport) 関数宣言;

「とすることで、この関数の〈DLL に結び付けるための情報〉が
ライブラリファイルに書き込まれます」
『そのためのエクスポートなんだ』
「そう、〈関数に __declspec(dllexport) を付けてライブラリファイルに
情報を出力する〉ことが〈関数をエクスポートする〉ってこと」
『これがなくちゃ始まらないわけね』
「さらに、エクスポートで DLL の方にもその関数を出力します」
『ん？　それって当然じゃない？』
「ん、当然って思うのは、 DLL の関数を呼ぶのは普通の
オブジェクトファイルと同じ、って考えてるからかな」
『違うの？』
「そう、 DLL の関数を呼ぶのはそんなに簡単じゃないんです。関数の
〈名前〉や〈呼び出し方〉が、普通に関数を呼ぶときと DLL のを呼ぶとき
とでは違っているんです」
『げげ』
「で、その関数の〈名前〉や〈呼び出し方〉を決めるのがエクスポート。
ライブラリファイルには〈名前〉や〈呼び出し方〉が書かれて、それに合わ
せて DLL の方に関数本体が入れられます」
『ってことは、ライブラリファイルがないと、 DLL の関数が呼び出せな
い……』
「そういうこと。ちょっとこの辺のテストしてみようか」

// DLLTestEasy.h

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

「これを」

// DLLTestEasy.h

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

「にしてリビルドしてみて」
『エクスポートしないってことね。ほいリビルド』
「 DLLTestEasy.lib は？」
『……あれ、ない！　もしかして、エクスポートする関数がないから？』
「そういうこと。 DLL にとってのライブラリファイルは、エクスポートさ
れた関数の情報を格納するためのファイル」
『エクスポートする関数がひとつもないとライブラリファイルすら作られな
いんだ……あれ？　でも DLL はあるんだね』
「 DLL は、結局は〈プログラムをコンパイルした、オブジェクトファイル
代わり〉だから、呼び出されるされない関係なく、関数があればコンパイル
して作られるんです」
『 DLL の方はなくなったりしない、と』
「それに、実はライブラリファイルがなくても DLL の中の関数を呼び出す
方法があるんです」
『……ちょっとマテ。話が違う』
「まぁそれは別の話だから置いといて」
『置いとくの！？』
「ここまでで、エクスポートの意味は分かったと思います」
『……つまり、エクスポートしないとその関数の情報がライブラリファイル
に書き込まれない、だから Exe から呼び出せない、ってわけね』
「そういうこと。で、逆に〈ライブラリファイルに情報がある関数を呼び出
す〉場合にはインポートが必要になります」
『その関数の頭に付けるわけね、こんな感じに』

__declspec(dllimport) 関数宣言;

「こうすることで、呼び出す側はその関数をライブラリファイルの中から探
して〈どのDLLにあってどういうふうに呼び出すのか〉という情報を憶えて
おきます」
『それが〈リンク (A)〉だよね』
「そうそう。で、〈実行時リンク (B)〉の時に、その情報を元に DLL の中
の関数を呼び出すようにするわけです。こんな感じに」

呼び出す側     : 関数をインポートする
呼び出される側 : 関数をエクスポートする

「ことが必要になります。これを、ひとつの関数宣言で切り替えるため」

// DLLTestEasy.h

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

「というマクロを用意して」

DLLTESTEASY_API 関数宣言;

『ってして、 DLL のプロジェクトで DLLTESTEASY_EXPORTS を #define し
ちゃえば自動的に切り替わるってわけね』
「そういうこと。この自動切り替えが複雑だから分かりにくいかもしれない
ので、エクスポートとインポートが必要、その便利な手段として切り替えを
している、って切り分けて考えてね」

/*
    Preview Next Story!
*/
『相変わらず混乱するなー』
「ふたつの視点で考えてるからね。というわけで」
『で？』
「次回は API でシンプルに考えてみます」
『え？　なんで API ？』
「というわけで次回」
＜ Version 15.12 API も DLL ！ ＞
『につづく！』
「 API も 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
*/
////////////////////////////////////////////////////////////////////

