Microsoft が無料で配布している開発環境。これで 誰でも無料で Windows アプリケーションが開発できる。 C++ も C# も使える。素晴らしい。
Contents
Microsoft から以下のものが無料でダウンロードできる。
上記の製品をMicrosoftのWebサイトからダウンロードして、インストール。 インストールはインストーラがやってくれる。仮に以下のディレクトリに インストールしたとする。
Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK に 詳しいインストールのやり方が書いてある。設定ファイルなどをエディタで 書き換えたりしなければいけないのでやっかいだけれど、このページは かなり丁寧に書いてあるので、まあ迷うことはない。:
> bjam -sTOOLS=vc-8_0 -sVC80_ROOT="C:\Program Files\Microsoft Visual Studio 8\VC" --prefix="C:\Program Files\boost" install
フリーソフトなどで、コマンドラインからコンパイルするようになっている ものもある。コマンドラインから使用するための環境設定は以下の通り。
Visual C++ 2005 Express をコマンドラインから使うには以下のバッチファイルを コマンドプロンプトから起動する。:
> "C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
Platform SDK をコマンドラインから使うには以下のバッチファイルをコマンド プロンプトから起動する。:
> "C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd"
Visual C++ 2005 Express と Platform SDK を同時にコマンドラインから 使うには、以下のようなバッチファイルがあると便利。:
set VS8EXDIR=C:\Program Files\Microsoft Visual Studio 8 set PSDKDIR=C:\Program Files\Microsoft Platform SDK "%VS8EXDIR%\VC\vcvarsall.bat" x86 & "%PSDKDIR%\SetEnv.cmd" /XP32 /RETAIL
Boost (http://www.boost.org/)はとても優れたC++ライブラリで当然 Windowsでも使用が可能。ただし、一部のモジュールにはバイナリの ライブラリが必要なので、それらはVisual C++でコンパイルしておかないと いけない。
boost のほとんどのライブラリは、ほとんどヘッダファイルだけで構成されて いるけれども、一部バイナリのライブラリが必要。Boost.Jam はバイナリ・ ライブラリをコンパイルするための実行ファイル。
Boostのサイト(http://www.boost.org/)から boost のソースコードを ダウンロードして、解凍する。
Visual C++ と Platform SDK をコマンドプロンプトから使用できるようにして 以下のコマンドで bjam.exe をコンパイル。:
> cd boost_1_33_0\tools\build\jam_src > build.bat
同じディレクトリの bin.nt86 に bjam.exe という実行ファイルができる。
Boost の構築とインストール に詳しいオプションの指定の仕方が書いてある。 さらに、Visal C++ 2005 Express での特別なオプションは VC80 Toolset に 書いてある。
bjam.exe ができたら後はそれを実行する。 インストールするディレクトリは --prefix でしていすることができる。:
> copy bin.ntx86\bjam.exe ..\..\.. > cd ..\..\.. > bjam -sTOOLS=vc-8_0 -sVC80_ROOT="C:\Program Files\Microsoft Visual Studio 8\VC" --prefix="C:\Program Files\boost" install
Boost が用意できたら、これを Visual C++ で使えるようにする。
Visual C++ ではプロジェクトごとに細かな設定を行う。
'Solution Explorer' でプロジェクトを示すアイコンを選択。
メニューの Toolbar から 'Project'->'Properties' の順で選択。 ダイアログ画面がポップアップ。
'Configuration Properties'->'C/C++'->'Command Line' の順で選択。
'Additional options:'にヘッダファイルへのパスを追加。以下は例。:
/I"C:\Program Files\boost\include\boost-1_33_1"
プロジェクトの Properties のダイアログ画面を開くまでは同じ。
'Configuration Properties'->'Linker'->'Command Line' の順で選択。
'Additional options:'にヘッダファイルへのパスを追加。以下は例。:
/LIBPATH:"C:\Program Files\boost\lib"
Visula C++ 2005 Express では、「ソリューション」と「プロジェクト」という 二つの概念があるらしい。「ソリューション」が上位で、その下に 複数の「プロジェクト」が存在できる。ただ、普通にウィザードなどで プログラムを作るときには、1ソリューション1プロジェクトで生成される。
My Documents\Visual Studio 2005\Project の配下に、作成した プロジェクト(ソリューション)と同じ名前のディレクトリが ある。この下に、<プロジェクト名>.sln というファイルがあるけど、 これがソリューションファイル。
ソリューションファイルと同じディレクトリに、さらにプロジェクト名と 同じディレクトリがあるはず。この下に、<プロジェクト名>.vcproj という ファイルがあるけど、これがプロジェクトファイル。
プロジェクトファイルと同じディレクトリに、まあ .cpp やら .h やらが あるはず。
これらのファイルを CVS に import しておけばOK。
こんなコードはVisual C++では通常コンパイルエラーになる。多分、 unexpected #endif とかいうエラーを喰らう。:
#if ! defined(_WINDOWS) #include "stdafx.h" #endif
これはVisual C++では通常コンパイル時のオプションに、/Yu"stdafx.h"が 含まれているからである。これは、stdafx.hのプリコンパイルヘッダを 使え、というオプションであり、これが指定されると、#include "stdafx.h" 以前の行は完全に無視される。それ故、#if と #endif がマッチングしなくなり、 上記のエラーが出る。これでは、同じコードをUNIXで使う時にとってもこまる。 対策としては、
Visual C++ では、DWORD とかいう型が int の代わり(?)に使われていたり する。歴史的経緯がありそうな名前だけれど、int8_t とか int16_t とか そういう型の方がビット数がはっきりしていて気持ちいい。まあ、自分で 定義してもたいして手間ではないけれど、boost ではそんな人のために ちゃんと UNIX の stdint.h に代わるものをよういしてくれている。:
#include <boost/cstdint.hpp> using boost::int8_t; using boost::int32_t;
とか宣言しておけばよい。その他色々な型やマクロも定義してくれているので とっても便利。
Win32 API を使うとやたらとでてくる型、HANDLE 型。Win32 のシステムが 確保してくれるリソースは大概この HANDLE を返してくる。void* じゃない のか、と思うのだけど、何かの構造体という可能性も捨てきれない。で、:
std::cout << "Size of HANDLE = " << sizeof(HANDLE) << std::endl; std::cout << "Name of HANDLE = " << typeid(HANDLE).name() << std::endl;
結果は、:
Size of HANDLE = 4 Name of HANDLE = void *
やっぱり void* か... 安心してコピー、コピー。