S-JIS[2007-09-27/2007-09-28] 変更履歴

Visual C++ 2005 Express Edition インストール

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]


error C2664: 'MessageBoxW' : 2 番目の引数を 'const char [11]' から 'LPCWSTR' に変換できません。

(空のコンソールアプリを指定して作ったプロジェクト)[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[]にする。


warning C4311: '型キャスト' : ポインタを 'HWND' から 'long' へ切り詰めます。
warning C4312: '型キャスト' : 'long' からより大きいサイズの 'HWND' へ変換します。

ハンドル(ポインター)のサイズの問題。[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用アプリケーション開発


VC++ページへ戻る / 技術メモへ戻る
メールの送信先:ひしだま