Visual Studio2005のExpress Editionは無償で提供されるようになった!(その中にVC++2005(VS ver8.0)も入っている)
ただしWin32APIやATLを使ったりDLLを作ったりするにはWindows Platform SDK(通称PSDK)もインストールする必要がある。(入っているのはだいぶ古いバージョンらしいけどねー)
インストール方法は以下のHPに詳しい。
ただし2007年9月現在でPSDKの最新は「Microsoft Platform SDK for Windows Server 2003
R2」であり、デフォルトのインストール場所は「C:\Program Files\Microsoft Platform SDK for Windows
Server 2003 R2」。つまりインストール手順に書かれているディレクトリを読み替えないといけない。
なお、名前は「Windows Server 2003」だが、WindowsXPにも対応している。
※インストールには(ネットワーク次第だが)VSが5〜6分、PSDKも5〜6分程度かかる感じ
(hotmailのアカウント作る方が時間かかる気が(爆))
VC++2005はだいぶ癖が強くて、昔ながらのソースではコンパイルエラー(警告)がかなり沢山出る。[2007-09-28]
(空のコンソールアプリを指定して作ったプロジェクト)[2007-09-28]
#include <windows.h> int main(int argc, char *argv[]) { ::MessageBox(NULL, "メッセージ", "タイトル", MB_OK); return 0; }
VC++2005では、デフォルトの文字コードの指定がUNICODEになっているので、char型でなくwchar_t(WCHAR)型を使わなければならない。
文字列定数に対してTEXTマクロ
か_Tマクロ
を使えば回避できる。(TEXTはwindows.hをincludeするだけで使える。_Tはtchar.hをincludeする必要がある。どっちも内容は同じようなものなので、どっちがいいんだろう?)
#include <windows.h> #include <tchar.h> int main(int argc, char *argv[]) { ::MessageBox(NULL, _T("メッセージ"), _T("タイトル"), MB_OK); return 0; }
また、文字列配列はchar[]
でなくTCHAR[]
にする。
ハンドル(ポインター)のサイズの問題。[2007-09-28]
void testHWnd(HWND hwnd) { long dw = (long)hwnd; hwnd = (HWND)dw; }
HWND等のハンドルは実態がポインターなので(直近も今回も)32bitなのだが、どうも64bit時代をにらんでか、ポインターは64bit換算でチェックして警告を出しているような気がする。(sizeof(HWND)
もsizeof(long)
も
まだ4だし!)
なのでこの警告は無視しても今のところ大丈夫だが、気にはなる。一応、以下のようにすれば警告は出なくなるが、正しいのか自信なし。
void testHWnd(HWND hwnd) { long dw = HandleToLong(hwnd); hwnd = (HWND)LongToHandle(dw); }
他にもPtrToLong()
やらIntToPtr()
やら、ポインターと整数を変換するマクロ(場合によっては関数)が色々用意されている。
(警告が出なくなるだけで、小さいサイズの整数なら切り捨てられることに変わりはないと思うが…実際64bitになったとき、HWNDも64bitになるのかな?そうするとかなり影響大きそうだよなぁ)
これらはbasetsd.hで定義されているが、windows.hをincludeしておけば自動的に含まれる。
参考: ITmediaの時代に遅れないためのWin64用アプリケーション開発