| |||||||||||||||||||||||||||||||||||||||||
サイト内検索
カスタム検索
|
いちばん小さい Windows プログラムを作ろう!前節までで基本的なビルドの方法もわかりました。それでは、いよいよ最も単純な Windows プログラミング版、Hello, world を作りましょう! 次の内容を helloworld.cpp として保存してください。 #include <windows.h> int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MessageBox( NULL, TEXT("Hello, world!"), TEXT("Hello"), MB_OK | MB_ICONINFORMATION ); return 0; } たったこれだけの中に、何やら見慣れないキーワードが山ほど出てきましたね。 WINAPI、LPSTR、TEXT ってなんでしょうか。しかも、そもそも C 言語で書いているはずなのに main もありません。 一体これはどういうことでしょうか? まさにこれこそが Windows プログラミングの難しさなので、なんだコリャ、と思って当然です。 後でちゃんと解説しますのでご心配なく! 今はとりあえずファイルを作って、ビルドして実行してみてください。 このプログラムの makefile は以下です。以下の内容を makefile という名前で保存してください。
TARGETNAME=helloworld
OUTDIR=.\chk
LINK32=link.exe
ALL : "$(OUTDIR)\$(TARGETNAME).exe"
"$(OUTDIR)" :
@if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
# compile
CPP_PROJ=\
/nologo\
/W4\
/Fo"$(OUTDIR)\\"\
/Fd"$(OUTDIR)\\"\
/c\
/Zi\
/DUNICODE\
/D_UNICODE\
LINK32_FLAGS=\
user32.lib\
/nologo\
/subsystem:windows\
/pdb:"$(OUTDIR)\$(TARGETNAME).pdb"\
/out:"$(OUTDIR)\$(TARGETNAME).exe"\
/DEBUG
LINK32_OBJS= \
"$(OUTDIR)\$(TARGETNAME).obj"
"$(OUTDIR)\$(TARGETNAME).exe" : "$(OUTDIR)" $(LINK32_OBJS)
$(LINK32) $(LINK32_FLAGS) $(LINK32_OBJS)
.cpp{$(OUTDIR)}.obj:
$(CPP) $(CPP_PROJ) $<
前回までの makefile と異なる点は、(1) user32.lib をリンク (2) /subsystem リンカオプションに windows を指定、の二つです。 user32.lib をリンクする必要があるのは Win32 API の MessageBox 関数を使っているためです。user32.lib を必要としない API だけでプログラムを記述している場合は、user32.lib をリンクする必要はありません。 また、/subsystem リンカオプションの windows という指定はいつも必要です。 上記の helloworld.cpp と makefile を同じディレクトリに保存し、nmake を実行し、 chk ディレクトリに正しく helloworld.exe が作成されることを確認してください。
> nmake -a
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
if not exist ".\chk/" mkdir ".\chk"
cl /nologo /W4 /Fo".\chk\\" /Fd".\chk\\" /c /Zi /DUNICODE /D_UNICODE "helloworld.cpp"
helloworld.cpp
helloworld.cpp(8) : warning C4100: 'nCmdShow' : unreferenced formal parameter
helloworld.cpp(7) : warning C4100: 'lpCmdLine' : unreferenced formal parameter
helloworld.cpp(6) : warning C4100: 'hPrevInstance' : unreferenced formal parameter
helloworld.cpp(5) : warning C4100: 'hInstance' : unreferenced formal parameter
link.exe user32.lib /nologo /subsystem:windows /pdb:".\chk\helloworld.pdb"
/machine:I386 /out:".\chk\helloworld.exe" /DEBUG ".\chk\helloworld.obj"
さらに helloworld.exe を実行し、以下のようにポップアップメッセージが表示されることを確認してください。
それでは、次節でこのプログラムの意味を解説します。 » プログラムはどこから始まるの? ~ WinMain とは? |
||||||||||||||||||||||||||||||||||||||||
|
© 2008-2010 小山圭介 All Rights Reserved.
|
|||||||||||||||||||||||||||||||||||||||||