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

    KAB-studio.h


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

    送信日： 2003/09/08(Mon) No.223
    配信数： 2850 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                         来週はお休み                           */

　来週、９月１５日分の配信はお休みします。毎年恒例の夏休みです。
　盆と正月に休むとちょうど年５０号になるので（爆）。
　ホームページの方も結構お休みします。詳細は文末にて。

////////////////////////////////////////////////////////////////////
/*                ２００３年９月８日（月）の更新                  */
http://www.kab-studio.biz/index.html

・ほとはー＆ KAB-studio.ROM ＆通販開始！
　夏コミ頒布物の通販を開始！！
　夏コミに行けなかったけど欲しかったというあなた、今すぐゲット！
[ KAB-studio 通販ガイド ]
http://www.kab-studio.biz/Info/Product/index.html

・ほとはー１話追加！
　三人合体ホットハーブに１話追加。築地の家はなんと……。
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html

・メニュー追加
　かぶスタのメニューを新しく作りました。一覧性が高いのでかぶスタの全
体像が見やすいと思います。で、代わりに「 KAB-studio へようこそ」を削
除しました（汗）。
[ KAB-studio メニュー ]
http://www.kab-studio.biz/Info/Menu/index.html


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

2003/08/31 (Sun)
　KAB-studio.ROM ダウンロード販売頓挫。結局通販へ。メニューページ作
成予定。９月表紙壁紙。描き方。火美ちゃんは難しい。そしてスキージャン
プペア。

2003/09/01 (Mon)
　朝礼＋週例会議＋研修。詳細設計。メロンブックスからお断りが。今日の
一枚はかなめ。そして古本屋。

2003/09/02 (Tue)
　ドキュメントにダメ出し。体重が１キロ増減。今日の一枚は深衣奈。今欲
しいものはアンプ。ＰＣからいい音で出したい。

2003/09/03 (Wed)
　ドキュメント修正しまくりで客先へ。落雷直撃。堅いドキュメントを書け
ない……。 Ever17 プレミアムバージョン？　ほとはーヒット数。

2003/09/04 (Thu)
　仕様の見落としに四苦八苦。ドキュメントできねー。経験がないのはまず
いけど、でもカバーできるものはあるのに……。 I've のアルバムはまだ
売ってくれなかった……。

2003/09/05 (Fri)
　プログラミング＆ドキュメント。 I've のアルバムはまんがの森で。その
他色々購入。土日に通販ページを立ち上げます。そして金曜の気分。

2003/09/06 (Sat)
　午前中は通販のとか。お昼にとらのあな……には行かず、そのあと休出。
帰りにとらのあなへ。品揃えかなりいい。銀だこ和風。土曜朝の２本がかな
りいい気が。今日の一枚はレッド。ほとはー外伝買って〜。


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

■　第八章　朱と碧　−１１−

「本当の事を言うと、私は言うの気が進まないんだけど……」
　昌子が言いよどみ、舞が「それなら」と言いかけた時、
「でも、朴さんが話した方がいいって」
「そう……」
　それが、雅樹の拒絶を感じさせる。
　泉での一件もあって、やや自分が冷めつつあると感じていても、それでも
雅樹の言動に一喜一憂している自分がいる。
「じゃあ……どこから話そうかしらね」
「あ、できれば彼が洗礼を受けた直前くらいから教えてもらいたいんですけ
ど」
「え……」
　昌子は言い淀んで、舞は気を遣う。
「あ、じゃあもう少し後でも」
「ううん、言えないとかじゃなくて、詳しくは知らないの。もう５０年以上
前のことだし、私は赤葉様から聴いただけだから。赤葉様に直接訊いた方が
いいかもしれないわね」
「５０年前……」
　確かに、あの新聞記者の話を聞けば、そのくらい昔というのはあり得るこ
とだった。
　戸が開き、ふたりは振り返る。
「赤葉様、申し訳ないのですが、結白さんにあの話をしていただけません
か？」
「お主には以前話したが」
「そうなんですが……」
「できれば、直接お聞かせ下さい」
　舞が一歩前に出て、頼む。
「あ」
　と、舞は赤葉の後ろをのぞく。
「朴はまだ泉におる。なら……好都合ということになるのかの」
　赤葉はふたりの間に座り、深いため息をついた。
　それは、つらい話なのだろう、赤葉は目を細め、静かに、ゆっくりと語り
始める。
「そう……まずは、あの３人の話から始めるかの……」
                                                        (第八章　完)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『とうとう通販が始まったね』
「かなり紆余曲折あったからね」
『どのくらい売れるかな？』
「うーん、まぁあんまり売れないだろうけどね」
『そう？　コミケとは違うと思うけど』
「うん、コミケだから売れたっていうのもあると思うし」
『そういうもん？』
「お祭りだから」
『……なんか消極的になってない？』
「……ならざるをえないっていうか……」
http://www.kab-studio.biz/Info/Product/index.html
_______________________________________________________________[KCM]

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

　Version 11.23
文字列編まとめ

「さて、文字列編は実は今回が最後です」
『む？　なんか文字列編って感じじゃなかったよーな』
「でも CString の仕組みはだいたいわかったでしょ？」
『そういえば演算子のオーバーロードとか仕組みはわかったから、それが 
CString に使われてるんだなーってのは』
「そのくらいでいいから。今はまだ使う側だけ。作ってみたのは、使うため
にもう少し理解した方がいいかなと思って」
『確かに中身わかってると大きいかも』
「さて、今回はそういった部分も含めてまとめてみます」
『最初は文字とか文字列とかの基本的な部分だよね』
「やっぱり \ の部分が一番重要かな」
『これはホントやっかいよねー。ソが嫌いになりそう……』
「でも _mbsbtype() とかを使えばいいから、それさえ守れば大丈夫だと思
うよ」
『あ……質問！　CString 使う時はどうすればいいの？　そのときもこれ使
うの？』
「 CString の場合は場合によるかな。たとえば、 CString::Find() ってメ
ンバ関数は文字列の検索をしてくれるメンバ関数なんだけど、これはちゃん
と文字種のチェックをしてくれるんです」

void Use_CString_Find()
{
    CString cStr = "ソフト\\です";
    TRACE( "%d\n", cStr.Find( "\\" ) );
    // 6
}

『お、ちゃんと最初のソにひっかからない』
「だから、こういう CString のメンバ関数を使っていれば大丈夫。ただ、
CString.GetAt() っていう、１ char ずつ取得するメンバ関数があるんだけ
ど、こういうのを使う場合には必要かな」
『でも、 CString のをどうやって _mbsbtype() に渡すの？』
「試してみようか」

void OutputFileName3()
{
    CString cStr = "C:\\Test\\ソフト.txt";
    CString cOutStr;
    int iCharType = _mbsbtype( (unsigned char *)"\\", 0 );

    // 後ろから見ていきます。
    for( int iIndex = cStr.GetLength() - 1; 0 <= iIndex ; iIndex-- )
    {
        // 文字種も含めてチェック。
        if(
            ( cStr.GetAt( iIndex ) == '\\' ) &&
            ( _mbsbtype
                ( (unsigned char *)(LPCTSTR)cStr
                , iIndex 
                ) == iCharType 
            )
          )
        {
            // \\ がみつかりました。
            // その次の文字から最後まで取り出します。
            cOutStr = cStr.Mid( iIndex + 1 );
            break;
        }
    }

    // 出力します。
    TRACE( "%s\n", cOutStr );
}

『 Version 11.04 ( No.204 ) の OutputFileName2() の CString 版ね』
「結構違うところあるでしょ」
『うん、 Mid() ってゆーの呼んでたりしてる』
「その辺の、 CString の使い方についても含めて見ていこうか。まず」

    for( int iIndex = cStr.GetLength() - 1; 0 <= iIndex ; iIndex-- )

「 CString::GetLength() で、 CString が持ってる文字列のサイズが取得
できます」
『 strlen() の代わりね』
「次は文字を取る部分」

            ( cStr.GetAt( iIndex ) == '\\' ) &&

『これがさっき言ってた１文字取るメンバ関数ね。 [] の代わりってとこ
ねー』
「ちなみに CString::operator[]() っていうのもあって」
『 [] のオーバーロード……ってことは』

            ( cStr[iIndex] == '\\' ) &&

「っていう配列っぽい使い方もできるんです」
『へー、ちょっとかっこいいかも……』
「次は _mbsbtype() に渡す部分」

            ( _mbsbtype
                ( (unsigned char *)(LPCTSTR)cStr
                , iIndex 
                ) == iCharType 
            )

『う”、なんか２回キャストしてる……』
「まず」

                ( (unsigned char *)cStr

「だとコンパイルエラーになります」

error C2440: 
'type cast' : 'class CString' から 'unsigned char *' 
に変換することはできません。

『あらま』
「で、基本に返って考えてみて、 CString を普通の文字列として使えるの
はなぜでしょう」
『？』
「つまり」

    const char *const pchData = cStr;

「みたいなことができるのはなんでかってこと」
『あー、確かその型に変換してくれるんだよね、型変換のオーバーロード
で』
「そう、 CString::operator LPCTSTR() があるから。でも、この型変換は
LPCTSTR だけにしか変換できないんです。で、 LPCTSTR ってなんだっけ」
『 Version 5.08 ( No.073 ) でやったよ、 const char * だって。だから
さっきのがうまくいくんでしょ？』
「そういうこと。だから、 const char * じゃないとうまくいかない、つま
り」
『 unsigned char * だとうまくいかない！』
「そういうこと！　 unsigned char * が求められても LPCTSTR とは違うか
ら、このメンバ関数が呼ばれないんです」
『だからコンパイルエラーね』
「だったら、というわけで、まず CString::operator LPCTSTR() を無理矢
理呼び出します」

    (LPCTSTR)cStr

『う”、キャストしたら呼び出されるわけね、でもなんか変……』
「だね。そういうメンバ関数が別に用意されてたらよかったんだけど……
で、これなら CString::operator LPCTSTR() が呼ばれて、これは普通の文
字列ポインタ、つまり const char * だから」
『これなら unsigned char * にキャストできる、と』
「そういうこと。だからああいうふうにしてるんです」
『なるほどねー』
「最後にこの部分」

            cOutStr = cStr.Mid( iIndex + 1 );

『 CString::Mid() ってメンバ関数だね。リファレンス見ると……文字列を
取り出す？』
「そう、 CString::Mid() は第１引数から第２引数までの範囲で文字列を取
り出して返してくれます。第２引数を省略すると最後の文字までってなりま
す」
『あれ？　でもさ、 CString::Right() とかあるけど、こっちの方が良くな
い？』
「 CString::Right() は〈文字列の最後から指定した文字数だけ取り出す〉
ってメンバ関数。今回の例の iIndex って文字列の先頭からの文字数だか
ら、 CString::Right() に使う時には」
『最後からの文字数にしなきゃいけない、と』
「そゆこと。だから今回は CString::Mid() の方が便利だから」
『でも、少なくとも CString はそういうの揃ってるから便利よね』
「もちろんそれだけじゃないよ」
『 new と delete 使ってるから文字列の長さを気にしなくていいし、コン
ストラクタとデストラクタで処理してくれるからその辺も気にしなくてい
い、だよね』
「そういうメリットも多いから、当分は CString 中心でね。さっきの例を
参考にすれば、 CString とランタイムを組み合わせるのもできるでしょ」
『うん、大丈夫だと思うよ』
「最後に、くれぐれも前回みたいな使い方はしないようにね」
『 CString の戻り値は CString で受け取ればいい、んだよね』
「そういうこと。というよりそもそも」

    CString cStr = "あいうえお";
    const char *pch = cStr;

「って使い方自体が間違ってるかも」
『え？　結構普通っぽいのに』
「この例だと、 pch の中には cStr の中の文字列ポインタが入ってるわけ
でしょ」
『うん』
「で、ここで Version 11.15 ( No.215 ) の文字列をくっつける例を思い出
して」
『確か、文字列に文字列を加える時って、両方とも入る分だけ新たに確保し
直して……あ”』
「わかった？」
『 cStr += "かきくけこ" とかしたら、 pch のポインタ、ダメなんじゃな
い？』
「そういうこと。だから、こういうふうにポインタに入れないようにして、
使う時は必ず関数への引数に渡すようにする、って感じかな」
『関数の引数なら大丈夫？』
「関数から抜ければポインタはなくなるわけだから」
『なるほどね』
「簡単に使える CString だけど、危険な部分はいっぱいあるから。今使っ
てる方法が本当に正しいのか、常に考えるようにね」
『……そのために、 malloc() とか new とか、コンストラクタとかの勉強
をしたってこと？』
「そういうこと」

/*
    Preview Next Story!
*/
「というわけで次回からは文字列以外の話をします」
『……？　なんか表現がへんくない？』
「っていうのも、文字列と関係した話だから」
『げ、まだ続くんだ』
「しかもきっと、今までで一番難しい話が出て来ます」
『げげげ！』
「というわけで次回」
＜ Version 12.01 文字列じゃない世界 ＞
『につづく！』
「覚悟してね」
『いや〜！』


////////////////////////////////////////////////////////////////////
/*                ２００３年９月１５日（月）の更新                */
http://www.kab-studio.biz/index.html

・夏休みです
　遅ればせながら夏休みを取らせて頂きます。
　KAB-studio.h の９月１５日配信分は休刊します。
　ちょお普通な日記は１０日から１３日前後までお休みします。
　三人合体ホットハーブも追加しません。
　特にほとはーの追加がないのがイタいかもしれませんが、最近は休まず毎
週更新をしてきたので今回は許してね〜。


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

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

