Return to Tech/win

The First Time

Win32ぷろぐらみんぐ
このコードだけでWindowsのプログラムができちゃう
file:main.cpp
#include <windows.h>
#include <studio.h>

int WINAPI WinMain(
  HINSTANCE hInst,
  HINSTANCE hPrevInst,
  LPSTR lpszCmdParam,
  int nCmdShow) {
  MessageBox( NULL, "HelloWorld", "debug", MB_OK);

  return 0;
}

int main(int argc, char *argv) {
  printf("Hello World\n");
  return 0;
}
できあがったソースを コンパイル-リンクしてみます
C:\>cl main.cpp /D WIN32 /D _DEBUG
 /D _WINDOWS /D _MBCS /c

うまくいけば main.obj ができあがります。
次にリンク

C:\>link main.obj /SUBSYSTEM:WINDOWS
 /MACHINE:X86 user32.lib
問題なければ main.exe ができあがります。

Memo:MessageBoxを使う場合は user32.lib を
使うことを linkerに伝える

main.exeを起動すると メッセージボックスが表示されます
OKを押すと終了します。

次に 下のように
 SUBSYSTEMの部分をCONSOLEとしてみましょう

 C:\link main.obj /SUBSYSTEM:CONSOLE
 /MACHINE:X86 user32.lib

main.exeを起動すると
 今度は コンソールプログラムのエントリmainが呼ばれます
file:Makefile
参考までに 下記は Makefileの例

SRC = main.cpp
OBJ = main.obj

PROGRAM = main.exe

INCLUDE = $(INCLUDE);※必要なものがあれば追加
LIB = $(LIB);※必要なものがあれば追加

LIBS = kernel32.lib user32.lib gdi32.lib
※その他必要なものがあれば追加

CC = cl
L = link

$(PROGRAM) : $(OBJ)
	$(L) $(OBJ) /SUBSYSTEM:WINDOWS
    /MACHINE:X86 $(LIBS) /OUT:$(PROGRAM)
※実際には一行、行頭はタブ

$(OBJ) :
	$CC) /D WIN32 /D _WINDOWS
    /D _DEBUG /D _MBCS /c $(SRC)
※実際には一行、行頭はタブ

clean:
	del $(PROGRAM) $(OBJ)


C:\> nmake もしくは nmake /F Makefileで
コンパイルとリンクが行われます

Return to Tech/win