private import win32.windows; private import std.utf; private import mainwindow; extern (C) void gc_init(); extern (C) void gc_term(); extern (C) void _minit(); extern (C) void _moduleCtor(); extern (C) void _moduleUnitTests(); // WinMain エントリー extern (Windows) int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int result; gc_init(); // initialize garbage collector _minit(); // initialize module constructor table try { _moduleCtor(); // call module constructors _moduleUnitTests(); // run unit tests (optional) result = user_start(hInstance); } catch (Object o) { // catch any uncaught exceptions MessageBox(null, toUTF16z(o.toString()), "Error", MB_OK | MB_ICONEXCLAMATION); result = 0; } gc_term(); // run finalizers; terminate garbage collector return result; } // 実際の実行開始関数 int user_start(HINSTANCE hInstance) { MainWindow w = new MainWindow(); w.CreateEx(WS_EX_APPWINDOW, toUTF16z("Moony"), toUTF16z("Moony"), WS_OVERLAPPEDWINDOW, 100, 100, 200, 100, NULL, NULL, NULL); MSG msg; BOOL bRet; while ((bRet = GetMessage(&msg, w.WindowHandle, 0, 0)) != 0) { if (bRet == -1) { assert(0); // error } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return 0; }