お知らせ:前のブログでBCCSkeltonのワイド文字対応を"BCCSkeltonWCV (Widew Characters Version)"としていましたが、何も全て馬鹿みたいにワイド文字化する必要はなく、「ASCII文字版とワイド文字版を最適化併用した方が賢いな」ということで、従来のASCII版を"BCCSkelton"のままとし、ワイド文字を扱う必要のあるクラスは'W'を付けたクラスを設けて、"BCCSkeltonWplus"(注)として「アドオン」型の対応を取ることとしました。今後も必要に応じて新たなWクラスを作成し、追加して行きます。

注:BCCForm and BCCSkeltonのシステムフォールダーに"BCCSkeltonWplus"フォールダーを設け、その中にワイド文字対応クラスのヘッダーを保存します。またそれらは"BCCSkeltonWplus.h"をインクルードして呼び出すことにします。

    ----    ----    ----    ----    ----    ----    ----

ひょんなこと(注)から、ずーっと避けてきたユニコード、ワイド文字に頭を突っ込んできましたが、今回からBCCSkeltonにおけるワイド文字を使った具体的なプログラミングを見てゆきます。

注:「バグは続くよ、どこまでも」シリーズの「禁則文字混入事件」編を参照。(リンク先は最初の記事)

 

いつも通り、「BCCSkeltonのプログラム作法はリソース作りから」です。今回は最も単純なエディターを作るので「SDIウィンドウにエディットコントロールを一個張り付けるだけ」ですが、一応メニューとバージョンダイアログは用意します。

 

で、(既にWCEditorを完成して)今日からプログラミングぐログを書こうとして「ん?まてよ?」と思い当たりました。

リソースコンパイラー(brc32.exe)はワイド文字に対応しているのかしら?

というのが疑問です。

いつものようにググって調べますが、(面倒見の悪いEmbarcaderoのことで)すぐに答えとなる情報はありません。ならば、といつも通り実験を行います。その結果は、...以下の//(解説:)を参照してください。

 

【WCEditor.rc】(ResWCEditor.hは省略します。)

//-----------------------------------------
//             BCCForm Ver 2.41
//    An Easy Resource Editor for BCC
//  Copyright (c) February 2002 by ysama
//-----------------------------------------
#include    "ResWCEditor.h"
//(解説:先ずファイル系ですが、「L"(ファイルパス、名)"」とすると文字列を認識はしますが、読み込めずエラーとなりますね。まぁ、ファイルパス名はASCIIでもよいのですが、「L"」で始まる文字列も読み込んでエラーにしなくてもよいように思えますが。)


//----------------------------------
// ダイアログ (IDD_VERSION)
//----------------------------------
IDD_VERSION DIALOG DISCARDABLE 0, 0, 160, 40
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION L"バージョン情報"
FONT 9, L"Times New Roman"
{
 CONTROL IDI_ICON, 0, L"STATIC", SS_SUNKEN | SS_ICON | WS_CHILD | WS_VISIBLE, 12, 10, 32, 32
 CONTROL L"", IDC_LABEL, L"STATIC", SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 42, 8, 80, 24
 CONTROL L"OK", IDOK, L"BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 130, 14, 20, 12
}

//(解説:ダイアログは完全にワイド文字対応しています。ダンプを取って調べてはいませんが、L""文字列を2バイトコードにしているのは間違いないでしょう。)

 

//-------------------------
// メニュー(IDM_MAIN)
//-------------------------
IDM_MAIN MENU DISCARDABLE
{
    POPUP L"ファイル(&F)"
    {
        MENUITEM L"新規(&N)", IDM_NEW
        MENUITEM L"データを開く(&O)", IDM_OPEN
        MENUITEM L"データの保存(&S)", IDM_SAVE
        MENUITEM L"名前をつけて保存(&A)", IDM_SAVEAS
        MENUITEM SEPARATOR
        MENUITEM L"終了(&X)", IDM_EXIT
    }
    POPUP L"編集(&E)"
    {
        MENUITEM L"切り取り(&T)", IDM_CUT
        MENUITEM L"コピー(&C)", IDM_COPY
        MENUITEM L"貼り付け(&P)", IDM_PASTE
    }
    POPUP L"変換型式(&F)"
    {
        MENUITEM L"UTF-16(BOM付)", IDM_UTF16, CHECKED
        MENUITEM L"UTF-8(BOM付)", IDM_UTF8
        MENUITEM L"UTF-8(BOM無)", IDM_UTF8N
    }
    POPUP L"ヘルプ(&H)"
    {
        MENUITEM L"バージョン情報(&V)", IDM_VERSION
    }
}

//(解説:メニューも完全にワイド文字対応しています。)


//--------------------------
// イメージ(IDI_ICON)
//--------------------------
IDI_ICON    ICON    DISCARDABLE    "C:\Users\(パス)\WCEditor\Icon.ico"

//(解説:これもファイル系なのでワイド文字対応していません。エラーになります。)

 

ということで、brc32.exeもリソース自体についてはワイド文字対応がされている、といってよいのでしょう。(実はバージョンダイアログでバージョン名がASCIIになるからと故意とブランクにしたのですが、不要だったようです。)

 

ps. brc32のワイド文字対応を調べていたら、こんなサイトを見つけました。16年前の環境がよく分かり、懐かしいです。

Borland C++ Compiler 5.5 - FAQ

 

追記:愕きモモノキ、なんですが、今朝このページを見てリンクを貼りましたが、その後見直してみると"Service unavailable"で表示されません。何故なんだ、Embarcadero?