では、今回から新しいCSTRクラスのFind、ReplaceとReplaceAllという3つの関数を使ったアプリケーションであるBCC2ECCのプログラミングの解説を始めます。
まず、BCC2ECCとはなにか(BCC2ECCの設計仕様)、について話します。
(1)ANSI(Shift JIS)ベースのBCCSkeltonライブラリーを承継し、Windows NativeであるUTF-16(ワイド文字)ベースのECCSkeltonライブラリーを(一応)完成させたのですが、「テキストエディタ―で一から書く」というのは本来のBCCSkeltonの設計目標から外れるので、基本的にBCCSkeltonと同等の開発環境(BCCFormとSkeltonWizardが使える)を付与することにあります。
(2)この為、BCCFormの出力するrcファイルと、そのrcファイルからSkeltonWizardの出力するbdpファイル、hファイル、Proc.hファイルとcppファイル(以下「SkeltonWizardファイル」)を利用してECCSkeltonでの開発ができるようにする必要があります。
(3)しかしSkeltonWizardファイルは基本的にANSI(Shift JIS)ベースのファイルなので、「SkeltonWizardによる出力以降、(コードをいじる前の)なるべく早い段階でECCSkelton用に変換」しなければなりません。
(4)その為にはBCCSkeltonとECCSkeltonのコード上の差異を踏まえ、文字列を扱うrcファイルと3つのSkeltonWizardファイル(hファイル、Proc.hファイルとcppファイル)に必要な変更を与える、その「差異の変換」を行うツールがBCC2ECCです。
(5)なるべく簡素にしたいので、モードレスダイアログベースとし、
①bdpファイルからファイルパスとプロジェクト名を取得し、
②rcファイル、cppファイル、hファイル、Proc.hファイルの順で差異変換を行ってゆき、
③変換後の結果を別個のファイル(拡張子前に"_ECC"を付ける-例:(プロジェクト)Proc.h-変換→(プロジェクト)Proc_ECC.h)として出力します。(注)
注:オリジナルのファイルは無変更です。しかし4つのファイルから"_ECC"を取ってコンパイルしたい場合には、BCCSkeltonのサンプルにあるRenamerを使うとよいでしょう。
(6)処理後はメッセージボックスによる「再変換、新しい変換、終了」の三択処理とします。
なお、「SkeltonWizardによる出力以降、(コードをいじる前の)なるべく早い段階でECCSkelton用に変換」が理想ですが、ANSIベースのプロジェクトをUTF-16に変更したい場合もあると考え、オプションで特定の関数等の変更も行えるようにしています。
本日テストを完了し、このBCC2ECC(モードレスダイアログベース)とこの間やったRTWEditor(SDIウィンドウベース)の二つのアプリケーションのリソースで出力されたコードをBCC2ECCで変換(注)してコンパイル実行できました。
注:RTWEditorがそうですが、SkeltonWizardは親ウィンドウをCMyWndクラスとしてコーディングしますので、親ウィンドウは自動で変換できますが、ユーザーが定義するその他のダイアログはそれぞれの任意のダイアログIDを基にクラス名が作られるので、これらはユーザーがマニュアルで対応する必要があります。
例:IDD_INPUT→INPUTDLGクラス、IDD_VERSION→VERSIONDLGクラス
但し、その場合も、
(1)テーブル開始行のクラス名の修正
例:BEGIN_CMDTABLE(CMyWnd)→BEGIN_CMDTABLE(VERSIONDLG)
(2)テーブルのコントロールコマンド修正
例:ON_COMMAND(versiondlg, IDC_VERTXT, OnVertxt())→ON(IDC_VERTXT, OnVertxt())
だけと、いたって簡便です。
