Sample code above works and puts out a date to the MessageBox.
But if I make changes to it as I need in a production program it does not work.
I did make the changes to the "Winnls.h" as instructed.
;-----------------------------------------------
; btestprog.asm - GoAsm 64-bit
; 8-19-2013 using Windows 7 pro 64-bit
#define LINKFILES
#define codejps
#define WIN64
#INCLUDE windows.h
.const
#ifndef LPSTR
#if !x64
#define LPSTR dd
#else
#define LPSTR dq
#endif
#endif
CommandLine LPSTR ?
DATA SECTION
colorbk dq 00ff0000h ; blue
hBrush dq 0
hdc dq 0
hInstance dq 0
hNFont dq 0
colortxt dd 00ffffffh ; white
datein dw 32 DUP (0)
msg4 db 'in message loop',0
msg5 db 'error in return value',0
AppName db "Test of GetDateFormatEx",0
szDisplayName db "Test of GetDateFormatEx",0
eswh db 0
headng1 db "Test Heading",0
szTimesNR db "Ariel",0
.code
start:
invoke GetModuleHandleA, NULL
mov Q[hInstance],rax
invoke GetCommandLine
invoke WinMain, [hInstance],NULL,[CommandLine],SW_SHOWDEFAULT
invoke ExitProcess,rax
WinMain:
FRAME hInst,hPrevInst,CmdLine,CmdShow
LOCAL wc:WNDCLASSEXA,msg:MSG,hWnd,RR:RECT
mov D[wc.cbSize],SIZEOF WNDCLASSEXA
mov D[wc.style],CS_BYTEALIGNWINDOW | CS_HREDRAW | CS_VREDRAW
mov rax,offset WndProc
mov Q[wc.lpfnWndProc],rax
mov D[wc.cbClsExtra],NULL
mov D[wc.cbWndExtra],NULL
push [hInst]
pop [wc.hInstance]
invoke LoadIcon,NULL,IDI_APPLICATION
mov Q[wc.hIcon], rax
invoke LoadCursor,NULL,IDC_ARROW
mov Q[wc.hCursor],rax
invoke CreateSolidBrush,[colorbk]
mov Q[hBrush],rax
mov Q[wc.hbrBackground],rax
mov Q[wc.lpszMenuName],NULL
mov Q[wc.lpszClassName],offset szDisplayName
mov Q[wc.hIconSm],0
invoke RegisterClassEx, addr wc
invoke SystemParametersInfo, SPI_GETWORKAREA, 0, addr RR, 0
INVOKE CreateWindowEx, NULL,addr szDisplayName,addr AppName,\
WS_OVERLAPPEDWINDOW,[RR.left],[RR.top],[RR.right],\
[RR.bottom],NULL,NULL,[hInst],NULL
mov [hWnd],rax
INVOKE ShowWindow,[hWnd], SW_SHOWNORMAL
INVOKE UpdateWindow, [hWnd]
L1:
INVOKE GetMessageA,addr msg,0,0,0
test eax,eax
jz >L3
cmp eax,-1
je >L2
INVOKE TranslateMessage,addr msg
INVOKE DispatchMessageA,addr msg
jmp L1
L2:
invoke MessageBox, [hWnd], addr msg4, addr msg5, MB_OK ;true
L3:
ret
ENDF
WndProc:
FRAME hWnd,iMsg,wParam,lParam
LOCAL ps:PAINTSTRUCT
.WM_PAINT
cmp D[iMsg],WM_PAINT
jne >>.WM_DESTROY
cmp B[eswh],1
je >>.pqm
mov B[eswh],1
invoke BeginPaint, [hWnd],addr ps
mov [hdc],rax
invoke SetTextColor, [hdc],[colortxt] ; text color white
invoke SetMapMode, [hdc],MM_TEXT
invoke SetBkMode, [hdc],TRANSPARENT
invoke CreateFont, 25,10,0,0,FW_DEMIBOLD,FALSE,FALSE,FALSE,\
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\
PROOF_QUALITY,FF_MODERN,addr szTimesNR
mov [hNFont],rax
invoke SelectObject, [hdc],[hNFont]
invoke TextOut, [hdc],200,200,addr headng1,12
invoke GetDateFormatEx, LOCALE_NAME_USER_DEFAULT,DATE_LONGDATE,\
NULL,NULL,addr datein,sizeof datein /2,NULL
invoke GetCommandLine
mov [CommandLIne], rax
invoke TextOutW, [hdc],800,30,addr datein,rax
; invoke MessageBoxW, NULL, addr datein, L"testmsg", MB_OK ;true
invoke EndPaint, [hWnd],addr ps
ret
.GetOut
.WM_DESTROY
cmp D[iMsg],WM_DESTROY
jne >.default
.pqm
invoke PostQuitMessage,NULL
jmp >>.END
.default
invoke DefWindowProc, [hWnd],[iMsg],[wParam],[lParam]
ret
.END
xor rax,rax
ret
ENDF