Win32 フリー開発環境
(Digital Mars C++ + CPad for Boaland C++Compiler 編)
(2007/12/2〜)
Digital Mars C++ は、なかなか優秀なフリーの C/C++ コンパイラなのですが、何故かあまり情報がありません。単に使っている人が少ないからでしょうが、おそらくはリソース コンパイラが多国語対応していない(正確には、“対応しているようで、できていない”というべきかも・・・)という問題を抱えたまま、一向に修正される気配が無いことが理由の一つではないかと思います。
しかし、やはりリソース コンパイラに同様の問題を抱えている他のコンパイラよりも使われていないような印象を受けます(本当のところはどうなのか、分かりませんが)。Borland C++ Compiler 5.51 がユーザ登録必須になり、僅かながら敷居が高くなった印象を受ける今(とはいっても、Turbo Debugger 単独でのユーザ登録が不要になったので、実質変わっていないのですが・・・)では、ポスト BCC として、もう少し注目されても良いような気がします。
というわけで、Digital Mars C++ を、無理矢理稀杜さんの CPad for Borland C++Compiler で使える状態にして、Borland C++ の代替なり得るか?(というところまでは試せないと思いますが (^^;) )検証してみることにしましょう。
まずは Digital Mars C++ 自体のインストールからです。Digital Mars のホームページから現時点での最新版である Digital Mars C/C++ Compiler Version 8.50 の本体 (dm850c.zip) をダウンロードします。解凍すると dm というフォルダができるので、適当な場所に移動しておきます。ここでは、C ドライブの直下に配置することにします。必要に応じて、ATL (ATL2.02.tar.gz) 、MFC (MFC4.21.tar.gz) や、STL (stlport.zip) 、Basic Utilities (bup.zip) 、Extended Utilities (dm832util.zip) などをダウンロードし、同じフォルダに展開しておきます。Extended Utilities は、全てがフリー配布されているわけではなく、基本的には CD 販売のみです。但し、diff、diffdir、flpyimg、patchobj を除けば、dm832util.zip を初めとした、いくつかの差分 (cd826.zip、cd828.zip、cd833.zip、cd848.zip、cd850.zip) に断片的に納められています。ATL/MFC は、dm フォルダに解凍します。ATL/MFC 以外は、本体同様 dm というフォルダが作成されるので、そのまま同じ場所(ここでは C:\ )に移動するだけです。同名ファイルが含まれている場合は新しい方を残せば良いでしょう。

次は CPad をインストールします。コマンドライン(+テキスト エディタ)で問題無い方は、スキップしていただいても結構です。
作者である稀杜さんのページからダウンロードして(なぜか今、本家から落とせないのでここにも置いておきます)、適当なフォルダに展開します。CPad は環境ごとにフォルダを分けることで、異なるコンパイラに使用することが可能です。ここでは、C:\Program Files\CPad\dmcpad というフォルダに解凍することにします。私の場合、既に BCC 環境が C:\Program Files\CPad\bcpad に構築してあったので、同じ階層に dmcpad フォルダを作成し、実行ファイル 2 つをコピーしただけです。
CPad は LHA 形式(拡張子 .LZH )で圧縮されているので、適当な解凍プログラムを用意する必要があります。私は MS 純正品(「正規の Windows の特典」からダウンロード)を使ってます。
通常はこんな感じになるはずですね(フォルダ名は違いますが。あと、展開直後では、まだ
bcpad.ini が無いはず)。

私の場合は、こんな感じにしました。ヘルプ等は
BCC 側と共有ということで。

bcpad.exe をダブルクリックして、最初に CPad
を起動すると、

と表示されますので、[OK] を押して、下記のように
[コンパイラのパス(W):] に C:\dm\bin\dmc.exe
を指定します。[標準のデータ保存フォルダ(D):]
は任意のフォルダを指定してください。

[OK] を押すと、データ保存フォルダが存在しない場合には、次のようなメッセージが表示されます。作成して良い場合は
[はい(Y)] を、既存のフォルダを使用する場合は
[キャンセル] を押せば [設定] ダイアログに戻りますので、[参照(K)...]
を押して既存のフォルダを選択し直しましょう。

[ファイル保存時に自動的にバックアップを取る(E)]
にチェックを入れている場合は、バックアップ
フォルダに対しても同様のメッセージが表示されます。やはり、作成して良い場合は
[はい(Y)] を押し、気が変わった場合 (^^;) は
[キャンセル] を押して、気の済むように設定変更しましょう
(^^;;) 。

ここまでで、取り敢えず Digital Mars C++ を使うことはできるのですが、最初に書いた通り、現状の Digital Mars C++ のリソース コンパイラ、rcc.exe は、日本語リソースを正しく解釈してくれません。コンパイラがシフト JIS を正しく解釈してくれるのと対照的ですよね。サポート BBS では、他国の方が同様の不具合を訴えていましたが対応してもらえず、結局、rcc.exe を解析して、rcc.exe 自身にパッチをあてるなど、涙ぐましい努力をされているようでした(私もそのパッチを試させていただきましたが日本語では NG でした)。
色々試して思案した結果、Digital Mars C++ 付属のリソース コンパイラの使用は諦め、Platform SDK の rc.exe を使うことにしました。余計な HDD 領域を使用することになりますが、背に腹は替えられません。また、Digital Mars C++ 付属の Win32 SDK は古いので、最新の Win32 プロジェクトのソースをコンパイルできないこともあります。その多くの場合は追加のマクロ定義が無いだけですので、取り敢えずヘッダも含めて Platform SDK のものを使用することで、そのような問題も回避でき、一石二鳥です(と、思うことにしましょう・・・)。rc.exe の出力する .res ファイルは、Digital Mars C++ のリンカ、OPTLINK で、問題なく実行ファイルにバインドできるのを確認しています。
Platform SDK には、Visual C++ 2005 Express Edition でも使用した、Windows Server 2003 R2 SDK を使うことにします。私の場合は、既に Windows Server 2003 R2 SDK - March 2006 Edition ISO Download から ISO イメージをダウンロードし、CD に焼いてインストールしてありますので、後はパスの設定を行うだけです。新たにインストールする方は、全てデフォルトのフォルダにインストールしてください。
Platform SDK を有効にするために、Digital Mars C++
と CPad の環境設定を書き換えます。まずは Digital
Mars C++ です。Platform SDK のヘッダ ファイルを使うようにするために、C:\dm\bin\sc.ini
の INCLUDE="%@P%\..\include";"%@P%\..\mfc\include";%INCLUDE%
を、次のように書き換えます(黄色の部分を追加)。
INCLUDE="C:\Program Files\Microsoft
Platform SDK for Windows Server 2003 R2\Include";"%@P%\..\include";"%@P%\..\mfc\include";%INCLUDE%
長いですね・・・やっぱり Platform SDK
をデフォルトのフォルダにインストールするのは考えものかも
(^_^;) 。
次は CPad です。[実行] メニュー → [設定(S)...]
→ [設定] ダイアログの [環境変数] タブを選択し、[以下の設定を変更する(C)]
にチェックを入れます。すると、各エディット
ボックスが入力可能になるので、[追加するパス(P):]
に C:\Program Files\Microsoft
Platform SDK for Windows Server 2003 R2\Bin と入力し、[OK]
を押します。やっぱり長いなぁ・・・。

これで、CPad の中からであれば、Platform SDK のリソース コンパイラ( rc.exe )を呼び出すことができます。
サンプル プログラムのビルド、実行
適当なサンプルが無いので、Visual C++ 2008 Express
Edition が出力するスケルトンに若干手を加え、makefile
を追加して Digital Mars C++ と Platform SDK のリソース
コンパイラを使用してビルドできるようにしてみました。こちらを適当なフォルダに解凍して、CPad
で makefile を開き、[make or コンパイル(Ctrl+F9)]
ボタンを押して、ビルドしてみてください。うまくいけば、Test.exe
が生成されるはずです。ちゃんと XP スタイルの適用もできています(あれ? バインドしただけで、特に
manifest.xml を使うようなオプション指定してないぞ・・・)。
(こんなものに著作権を主張するなんて・・・ではなくて、
バージョン情報ダイアログの編集例 (^_^;) です、念のため。これは元々 Visual C++ が吐き出したスケルトン プロジェクトなので、私の書いたコードなど全く含まれていません。)

因みに、ここで扱っているリソース スクリプトは、リソース エディタの ResEdit が吐き出したものなのですが、この ResEdit の出力ファイル(日本語を含まないもの)を Digital Mars C++ 標準のリソース コンパイラ、rcc.exe でコンパイルしても、コンパイルできません。どうやらリソース スクリプト内のパラメータが増えているらしく、rc.exe ではコンパイル可能ですが rcc.exe ではエラーになってしまいます。そういう意味でも rcc.exe の代わりに rc.exe を使う、というのは正解かもしれません。
おわりに
気が向けば(というか、時間が取れれば)、もう少し突っ込んだ検証も行ってみたいと思いますが、何かお気付きの点がありましたら、掲示板等で連絡いただければ幸いです。
(2007/12/25)