Visual Studio 2005 Express プログラミング

Microsoft が無料で配布している開発環境。これで 誰でも無料で Windows アプリケーションが開発できる。 C++ も C# も使える。素晴らしい。

Contents

Visual Studio 2005 Express のインストール

Microsoft から以下のものが無料でダウンロードできる。

インストール

上記の製品をMicrosoftのWebサイトからダウンロードして、インストール。 インストールはインストーラがやってくれる。仮に以下のディレクトリに インストールしたとする。

  • Microsoft Visual Studio 2005 Express => C:Program FilesMicrosoft Visual Studio 8
  • Microsoft Platform SDK => C:Program FilesMicrosoft Platform SDK

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

コマンドラインでの使用

フリーソフトなどで、コマンドラインからコンパイルするようになっている ものもある。コマンドラインから使用するための環境設定は以下の通り。

  1. Visual C++ 2005 Express をコマンドラインから使うには以下のバッチファイルを コマンドプロンプトから起動する。:

    > "C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
    
  2. Platform SDK をコマンドラインから使うには以下のバッチファイルをコマンド プロンプトから起動する。:

    > "C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd"
    
  3. 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 のインストール

Boost (http://www.boost.org/)はとても優れたC++ライブラリで当然 Windowsでも使用が可能。ただし、一部のモジュールにはバイナリの ライブラリが必要なので、それらはVisual C++でコンパイルしておかないと いけない。

Boost.Jam のコンパイル

boost のほとんどのライブラリは、ほとんどヘッダファイルだけで構成されて いるけれども、一部バイナリのライブラリが必要。Boost.Jam はバイナリ・ ライブラリをコンパイルするための実行ファイル。

  1. Boostのサイト(http://www.boost.org/)から boost のソースコードを ダウンロードして、解凍する。

  2. Visual C++ と Platform SDK をコマンドプロンプトから使用できるようにして 以下のコマンドで bjam.exe をコンパイル。:

    > cd boost_1_33_0\tools\build\jam_src
    > build.bat
    
  3. 同じディレクトリの bin.nt86 に bjam.exe という実行ファイルができる。

Boost のコンパイル

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

Visual C++ 2005 Express で Boost を使う

Boost が用意できたら、これを Visual C++ で使えるようにする。

ヘッダファイルへのパスを通す

Visual C++ ではプロジェクトごとに細かな設定を行う。

  1. 'Solution Explorer' でプロジェクトを示すアイコンを選択。

  2. メニューの Toolbar から 'Project'->'Properties' の順で選択。 ダイアログ画面がポップアップ。

  3. 'Configuration Properties'->'C/C++'->'Command Line' の順で選択。

  4. 'Additional options:'にヘッダファイルへのパスを追加。以下は例。:

    /I"C:\Program Files\boost\include\boost-1_33_1"
    

ライブラリへのパスを通す

プロジェクトの Properties のダイアログ画面を開くまでは同じ。

  1. 'Configuration Properties'->'Linker'->'Command Line' の順で選択。

  2. 'Additional options:'にヘッダファイルへのパスを追加。以下は例。:

    /LIBPATH:"C:\Program Files\boost\lib"
    

Visual C++ 2005 Express を CVS で管理

Visula C++ 2005 Express では、「ソリューション」と「プロジェクト」という 二つの概念があるらしい。「ソリューション」が上位で、その下に 複数の「プロジェクト」が存在できる。ただ、普通にウィザードなどで プログラムを作るときには、1ソリューション1プロジェクトで生成される。

ソリューションファイル

My Documents\Visual Studio 2005\Project の配下に、作成した プロジェクト(ソリューション)と同じ名前のディレクトリが ある。この下に、<プロジェクト名>.sln というファイルがあるけど、 これがソリューションファイル。

プロジェクトファイル

ソリューションファイルと同じディレクトリに、さらにプロジェクト名と 同じディレクトリがあるはず。この下に、<プロジェクト名>.vcproj という ファイルがあるけど、これがプロジェクトファイル。

ソースコードその他

プロジェクトファイルと同じディレクトリに、まあ .cpp やら .h やらが あるはず。

CVSで管理すべきファイル

  • ソリューションファイル (.sln)
  • プロジェクトファイル (.vcproj)
  • ソースコードファイル (.cpp, .h 等)
  • リソースファイル (.rc, .res 等)
  • その他 (README.txt 等)

これらのファイルを CVS に import しておけばOK。

Visual C++ 2005 Express プログラミング Tips

stdafx.h の謎

こんなコードはVisual C++では通常コンパイルエラーになる。多分、 unexpected #endif とかいうエラーを喰らう。:

#if ! defined(_WINDOWS)
#include "stdafx.h"
#endif

これはVisual C++では通常コンパイル時のオプションに、/Yu"stdafx.h"が 含まれているからである。これは、stdafx.hのプリコンパイルヘッダを 使え、というオプションであり、これが指定されると、#include "stdafx.h" 以前の行は完全に無視される。それ故、#if と #endif がマッチングしなくなり、 上記のエラーが出る。これでは、同じコードをUNIXで使う時にとってもこまる。 対策としては、

  1. Visual C++ の設定を変更し、/Yu"stdafx.h"オプションをはずす。ただし、 ちょっとコンパイルが遅くなる。
  2. UNIX側で touch /usr/include/stdafx.h する。

整数型がない

Visual C++ では、DWORD とかいう型が int の代わり(?)に使われていたり する。歴史的経緯がありそうな名前だけれど、int8_t とか int16_t とか そういう型の方がビット数がはっきりしていて気持ちいい。まあ、自分で 定義してもたいして手間ではないけれど、boost ではそんな人のために ちゃんと UNIX の stdint.h に代わるものをよういしてくれている。:

#include <boost/cstdint.hpp>

using boost::int8_t;
using boost::int32_t;

とか宣言しておけばよい。その他色々な型やマクロも定義してくれているので とっても便利。

HANDLEって何?

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* か... 安心してコピー、コピー。