I have suggested to Yves a number of times that his include file set are desperately needed by the UASM folks but that they are in the wrong format for 64 bit MASM. 64 bit MASM simply does not use prototypes and while you can write them, they are not used, they are simply a left over from the 16 and 32 bit days that have not been removed. Below is proof that you can do what you like with prototypes in 64 bit MASM but the simply do not work.
The sections marked in blue show what you can do and why it does not matter.
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \masm32\include64\masm64rt.inc
; -----------------
; USELESS PROTOTYPE
; -----------------
TestProc PROTO arg1:QWORD,arg2:QWORD,arg3:QWORD,arg4:QWORD,arg5:QWORD
.data?
hInstance dq ?
hWnd dq ?
hIcon dq ?
hCursor dq ?
sWid dq ?
sHgt dq ?
hBrush dq ?
.data
classname db "template_class",0
caption db "Template",0
.code
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
entry_point proc
GdiPlusBegin ; initialise GDIPlus
ics equ <32> ; icon size
mov hInstance, rvcall(GetModuleHandle,0)
mov hIcon, rv(LoadImage,hInstance,10,IMAGE_ICON,ics,ics,LR_DEFAULTCOLOR)
mov hCursor, rvcall(LoadCursor,0,IDC_ARROW)
mov sWid, rvcall(GetSystemMetrics,SM_CXSCREEN)
mov sHgt, rvcall(GetSystemMetrics,SM_CYSCREEN)
mov hBrush, rvcall(CreateSolidBrush,00444444h)
call main
GdiPlusEnd ; GdiPlus cleanup
rcall ExitProcess,0
ret
entry_point endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
main proc
LOCAL wc :WNDCLASSEX
LOCAL lft :QWORD
LOCAL top :QWORD
LOCAL wid :QWORD
LOCAL hgt :QWORD
mov wc.cbSize, SIZEOF WNDCLASSEX
mov wc.style, CS_BYTEALIGNCLIENT or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, ptr$(WndProc)
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
mrm wc.hInstance, hInstance
mrm wc.hIcon, hIcon
mrm wc.hCursor, hCursor
mrm wc.hbrBackground, hBrush
mov wc.lpszMenuName, 0
mov wc.lpszClassName, ptr$(classname)
mrm wc.hIconSm, hIcon
rcall RegisterClassEx,ptr$(wc)
mov wid, rvcall(getpercent,sWid,65) ; 65% screen width
mov hgt, rvcall(getpercent,sHgt,65) ; 65% screen height
rcall aspect_ratio,hgt,45 ; height + 45%
cmp wid, rax ; if wid > rax
jle @F
mov wid, rax ; set wid to rax
@@:
mov rax, sWid ; calculate offset from left side
sub rax, wid
shr rax, 1
mov lft, rax
mov rax, sHgt ; calculate offset from top edge
sub rax, hgt
shr rax, 1
mov top, rax
; ---------------------------------
; centre window at calculated sizes
; ---------------------------------
invoke CreateWindowEx,WS_EX_LEFT or WS_EX_ACCEPTFILES, \
ADDR classname,ADDR caption, \
WS_OVERLAPPEDWINDOW or WS_VISIBLE,\
lft,top,wid,hgt,0,0,hInstance,0,0,0,0,0,0,0,0,0,0,0 ; <<<---10 extras
mov hWnd, rax
call msgloop
ret
main endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
msgloop proc
LOCAL msg :MSG
LOCAL pmsg :QWORD
mov pmsg, ptr$(msg) ; get the msg structure address
jmp gmsg ; jump directly to GetMessage()
mloop:
rcall TranslateMessage,pmsg
rcall DispatchMessage,pmsg
gmsg:
test rax, rvcall(GetMessage,pmsg,0,0,0) ; loop until GetMessage returns zero
jnz mloop
ret
msgloop endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
WndProc proc hWin:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
LOCAL hDC :QWORD
LOCAL ps :PAINTSTRUCT
LOCAL dfbuff[260]:BYTE
.switch uMsg
.case WM_COMMAND
.switch wParam
.case 200
rcall SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL
.endsw
.case WM_CREATE
; *******************************
; *******************************
; *******************************
invoke TestProc
invoke TestProc,0
invoke TestProc,0,0
invoke TestProc,0,0,0
invoke TestProc,0,0,0,0
invoke TestProc,0,0,0,0,0
invoke TestProc,0,0,0,0,0,0
; *******************************
; *******************************
; *******************************
.return 0
.case WM_PAINT
rcall BeginPaint,hWin,ptr$(ps)
mov hDC, rvcall(GetDC,hWin)
; code here
rcall ReleaseDC,hWin,hDC
rcall EndPaint,hWin,ptr$(ps)
.case WM_DROPFILES
rcall DragQueryFile,wParam,0,ptr$(dfbuff),260
invoke MsgboxI,hWin,ADDR dfbuff,"Drop File Name",MB_OK,10
.case WM_CLOSE
rcall SendMessage,hWin,WM_DESTROY,0,0
.case WM_DESTROY
rcall PostQuitMessage,NULL
.endsw
rcall DefWindowProc,hWin,uMsg,wParam,lParam
ret
WndProc endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
TestProc proc arg1:QWORD,arg2:QWORD,arg3:QWORD,arg4:QWORD,arg5:QWORD
nop
ret
TestProc endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end
I've been following you guys online for YEARS by now. You are like champions to me and many other programmers.
But why oh why are you having this childish conversation? Seriously? Out of all the people you guys start pointing fingers at each others?!!!
I get tired of it too. This used to be a friendly forum but there are a number of people who act to poison the well.