ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

VC++ 2008 Expressを使ってWTLの環境設定とサンプルコンパイル

公開日| 2009年04月24日 | コメントはまだありません。
まずは、インストール
インストールの詳細は、いろんなサイトで記載がありますので、そちらを参照してください。基本的に画面にしたがってインストールするだけです。

  1. Visual C++ 2008 Express Editionをインストール
  2. WindowsR Server 2003 SP1 Platform SDK もしくは (R2)インストール
  3. WTLをインストール
    インストールを終えたら、2008用のWTLのインストール先へアプリケーション作成ウィザードを入れよう。
    1. WTLのインストール先へ、ZIPファイルを解凍し、コピーする。
    2. WTLのインストール先のAppWiz内のsetup90x.jsを実行する。
    詳しくは、http://www.sfc.wide.ad.jp/~irino/blog/2008/09/visual-c-2008-expressappwizwtl8.phpへ。
    実際に、筆者は、setup80x.jsをコピーして、自身で適当に改編して使っていますので、上記のように公開されていること自体、最近まで知りませんでした。
    なので、使用したわけではありませんが、先人が公開されておりますので、そちらをご利用ください。
    以下のものは、あくまで、筆者が、適当に改編しているものです。
    保存用としてこのサイトへアップしております。(上記のリンクが切れていたりしたら、こちらで良ければご利用ください。)

  4. 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冊読まれると、ネットの記事を読んでも、おおよその理解ができるようになると思います。
本は、経験者でも、ネットだけでは判らない様々な事に気づかされることがあります。


プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series)

プログラミングWindows第5版〈下〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series)

C++テンプレートテクニック

プログラムを作ろう! Microsoft Visual C++ 2008 Express Edition 入門 (マイクロソフト公式解説書)

コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ