Nimrod で空ウインドウを出してみた

force7.de で、空ウインドウを出してみた.

import
  windows

const
  NULL = 0

proc wndProc(hWnd: HWND, msg: UINT, wParam: WPARAM, lParam: LPARAM): LRESULT{.stdcall.} =
  case msg
  of WM_DESTROY:
    PostQuitMessage(0)
  else:
    return DefWindowProc(hWnd, msg, wParam, lParam)
  return 0

proc winMain(hinst: HINST, hinstPrev: HINST, lpszCmdLine: LPSTR, nCmdShow: int): int{.stdcall.} = 
  const
    szClassName = "WCN_HELLO_WINDOWS"

  var
    wndClass: WNDCLASS
    hWnd: HWND
    msg: MSG

  wndClass.style = CS_HREDRAW or CS_VREDRAW
  wndClass.lpfnWndProc = wndProc
  wndClass.cbClsExtra = 0
  wndClass.cbWndExtra = 0
  wndClass.hInstance = hInst
  wndClass.hIcon = NULL
  wndClass.hCursor = LoadCursor(0, IDC_ARROW())
  wndClass.hbrBackground = GetStockObject(WHITE_BRUSH)
  wndClass.lpszMenuName = nil
  wndClass.lpszClassName = szClassName

  if RegisterClass(wndClass) == 0:
    return 0

  hWnd = CreateWindow(
    szClassName,
    "Hello Windows!",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    NULL,
    NULL,
    hInst,
    nil)

  discard ShowWindow(hWnd, nCmdShow)
  discard UpdateWindow(hWnd)
  while GetMessage(msg, NULL, 0, 0) != 0:
    discard TranslateMessage(msg)
    discard DispatchMessage(msg)
  return msg.wParam

var
  hInst: HINST
  si: STARTUPINFO
  nCmdShow: int

hInst = GetModuleHandle(nil)
si.dwFlags = 0
GetStartupInfo(si)
nCmdShow = if (si.dwFlags and STARTF_USESHOWWINDOW) != 0: int(si.wShowWindow) else: SW_SHOWDEFAULT

discard winMain(hinst, 0, "", nCmdShow)

Nimrod 0.8.8 で試したところ、OS ビルトインの DLL にしか依存しない実行ファイルが 96.3KB (strip で 69.0KB) で生成されたので、なかなか良い感じ. が、余りにも情報がなさすぎてアレですw