I have the problem with the following code in D2: CreateWindowEx returns NULL but I haven't got idea why?
module test; import base; static import user32; static import kernel32; void MsgBox(immutable char [] o_str){ user32.messageBox(null, cast(str)o_str, cast(str)"msg", 0x0); } struct WndClassEx{ align: dword size = 0x00000030; dword style = 0x00000000; ptr wndProc = null ; dword clsExtraBytes = 0x00000000; dword wndExtraBytes = 0x00000000; ptr hInstance = null ; ptr hIcon = null ; ptr hCursor = null ; ptr hbrBackground = null ; str menuName = null ; str className = null ; ptr hIconSm = null ; } class Application{ static const ptr hInstance; static const str commandLine; static this(){ hInstance = kernel32.getModuleHandle(null); commandLine = kernel32.getCommandLine(); assert(hInstance && commandLine, "Application initialization fail"); } } extern (Windows) static dword wndProc(ptr o_hwnd, dword o_msg, dword o_wparam, dword o_lparam){ return 0; } class Window{ const ptr handle; this(){ WndClassEx wndClass; wndClass.size = 0x00000030; wndClass.wndProc = cast(ptr)&wndProc; wndClass.hInstance = kernel32.getModuleHandle(null); wndClass.className = cast(str)"clsname"; if(!user32.registerClassEx(cast(ptr)&wndClass)){ user32.messageBox(null, user32.translateErrorCode(kernel32.getLastError()), cast(str)"error", 0x00000000); assert(false, "Window class registring failed"); } handle = user32.createWindowEx( 0, wndClass.className, cast(str)"<applicationcaption>", 0x00CF0000, 0, 0, 640, 480, null, null, Application.hInstance, null ); if(handle is null){ // ERROR_SUCCESS user32.messageBox(null, user32.translateErrorCode(kernel32.getLastError()), cast(str)"error", 0x00000000); assert(handle); } user32.showWindow(handle, 0x0000000A); user32.updateWindow(handle); } } void main(){ try{ Window wnd = new Window(); } catch(Object o){ MsgBox(o.toString); } }