VC++ 2008 Expressを使ってWTLの環境設定とサンプルコンパイル
まずは、インストール
インストールの詳細は、いろんなサイトで記載がありますので、そちらを参照してください。基本的に画面にしたがってインストールするだけです。
- Visual C++ 2008 Express Editionをインストール
- WindowsR Server 2003 SP1 Platform SDK もしくは (R2)インストール
- WTLをインストール
インストールを終えたら、2008用のWTLのインストール先へアプリケーション作成ウィザードを入れよう。
- WTLのインストール先へ、ZIPファイルを解凍し、コピーする。
- WTLのインストール先のAppWiz内のsetup90x.jsを実行する。
詳しくは、http://www.sfc.wide.ad.jp/~irino/blog/2008/09/visual-c-2008-expressappwizwtl8.phpへ。
実際に、筆者は、setup80x.jsをコピーして、自身で適当に改編して使っていますので、上記のように公開されていること自体、最近まで知りませんでした。
なので、使用したわけではありませんが、先人が公開されておりますので、そちらをご利用ください。
以下のものは、あくまで、筆者が、適当に改編しているものです。
保存用としてこのサイトへアップしております。(上記のリンクが切れていたりしたら、こちらで良ければご利用ください。)
- Visual C++ 2008 Express Editionのディレクトリへ、WTLのディレクトリと、Platform SDKに含まれるATLのディレクトリを追加する。
[ツール]->[オプション]->[プロジェクトおよびソリューション]->[VC++ ディレクトリ]-> ディレクトリを表示するプロジェクト:[インクルード ファイル]で追加
- %Platform SDKインストールディレクトリ%\Include (例:C:\Program Files\Microsoft Platform SDK\Include)
- %Platform SDKインストールディレクトリ%\Include\atl (例:C:\Program Files\Microsoft Platform SDK\Include\atl)
- %WTLインストールディレクトリ%\Include (例:C:\WTL80\include)
インストールは、これで完了だが、ATLのバージョンが古いため、最新のコンパイラでは、エラーになってしまう場合があります。
そのため、以下の2つのファイルを修正しなければならなりません。
- %Platform SDKインストールディレクトリ%\Include\atl\atlwin.h
- %Platform SDKインストールディレクトリ%\Include\atl\atlbase.h
- atlwin.h の1725行目あたりを以下のように変更する
1
2
3
4
5
6
7
8
| BOOL SetChainEntry(DWORD dwChainID, CMessageMap* pObject, DWORD
dwMsgMapID = 0)
{
int i;
// first search for an existing entry
for(i = 0; i < m_aChainEntry.GetSize(); i++)
|
- atlbase.h の287行目あたりを以下のように変更する
1
2
3
4
5
6
7
8
9
10
11
| /* Comment it
PVOID __stdcall __AllocStdCallThunk(VOID);
VOID __stdcall __FreeStdCallThunk(PVOID);
#define AllocStdCallThunk() __AllocStdCallThunk()
#define FreeStdCallThunk(p) __FreeStdCallThunk(p)
#pragma comment(lib, "atlthunk.lib")
*/
#define AllocStdCallThunk() HeapAlloc(GetProcessHeap(), 0, sizeof(_stdcallthunk))
#define FreeStdCallThunk(p) HeapFree(GetProcessHeap(), 0, p)
|
参照:
http://www.codeproject.com/KB/wtl/WTLExpress.aspx
サンプルをコンパイルしてみよう
WTLには、標準で簡単なサンプルがついています。まずは、そのサンプルをコンパイルして、環境が正しくできているかみてみましょう。
%WTLインストールディレクトリ%\Samples\MTPad
のディレクトリの "MTPad.dsw" を起動してみましょう。
自動的に古いVisla C++のプロジェクトを最新へ更新してくれると思います。
変換が終了して、読み込めたら、ビルドを実施してみましょう。
コンパイル終了!!
リンク失敗!!
以下のようなメッセージが表示されたことと思います。
リンクしています...
CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409.
LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。.
ビルドログは "file://c:\WTL80\Samples\MTPad\Debug\BuildLog.htm" に保存されました。.
これは、リソースファイルの設定の仕方が古いためにVisual C++ 2008では、エラーとなってしまうものです。
以下の行を削除すると、リンクできるようになります。
MTPad.rc 43行目
"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST ""res\\\\MTPad.exe.manifest""\r\n"
MTPad.rc 399行目
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\MTPad.exe.manifest"
リンクできたら、実行してみましょう。
以下のような画面で表示されたら、OKです。
WTLは、開発環境を全て無料で、構築することができ、さらにライセンス上も商用での利用も可ですし、
LGPLのようなリバースエンジニアリングの許容を強要する記述もありませんから、安心して使えるのかもしれません。
ただ、今後の展開が問題です。WTLは、それほど、開発者に人気のライブラリでもないので、今後、バージョンアップが
ちゃんと、行われるのか・・・が不安な点です。また、人気がない分、ウェブでの記事も少なく、情報量が、MFCなどに比べると
ぐんと少なくなります。
一番の救いは、手元に全てのソースコードが存在するこではないでしょうか。
上記を踏まえて、心してやれば、便利なライブラリであることは間違いないと思います。
関連記事:
リソースエディタResEditとVC++ 2008 Exp.を連動させる

結局のところ、WTLは、WindowsAPI+ATLとテンプレートの組み合わせです。
もっと、そのあたりについて詳しく知りたい方は、以下の本なども良いと思います。
はじめて間もない方は、2,3冊読まれると、ネットの記事を読んでも、おおよその理解ができるようになると思います。
本は、経験者でも、ネットだけでは判らない様々な事に気づかされることがあります。
コメントをどうぞ