The MASM Forum

64 bit assembler => 64 bit assembler. Conceptual Issues => Topic started by: seasea on March 31, 2018, 02:04:06 AM

Title: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on March 31, 2018, 02:04:06 AM
Hello, where are the sturcture defines, like  DLGTEMPLATE,DLGITEMTEMPLATE,PROPSHEETHEADERA ...
I can't find them .
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: hutch-- on March 31, 2018, 02:15:36 AM
Give this tool a blast, there will always be extra structures, this tool does most of the work and you may need to manually tweak some bits of the result.

http://masm32.com/board/index.php?topic=5546.0
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on March 31, 2018, 02:26:03 AM
GOOD!
But, itt looks not simple, ha ha. :biggrin:

hutch--, thank you very much. :t
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: jj2007 on March 31, 2018, 03:52:13 AM
Most probably, the versions in \Masm32\include\Windows.inc will work just fine. Extract them and put them in an extra inc file.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on March 31, 2018, 02:45:33 PM
jj2007, thanks.
Yes, may be OK.

But, the problem is that, some vars in the struct should still keep 32bit, some should be changed to 64bit. So, it's a manually work that need more patient.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: jj2007 on March 31, 2018, 03:11:56 PM
Quote from: seasea on March 31, 2018, 02:45:33 PMthe problem is that, some vars in the struct should still keep 32bit, some should be changed to 64bit

Only in PROPSHEETHEADER, and it's a handful of fields that are either handles or start with "p".
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on April 01, 2018, 02:08:58 AM
Quote from: jj2007 on March 31, 2018, 03:11:56 PM
Only in PROPSHEETHEADER, and it's a handful of fields that are either handles or start with "p".

Yes, I know. So, the problem is that, there is no Micosoft's "offical" masm64 API manual.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: jj2007 on April 01, 2018, 02:24:23 AM
You can always code a simple example in Micros??t Visual C, build it in 32- and 64-bit mode, and compare the structure's offsets. But trust me, handles are 32/64, and everything that starts with a "p", too.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: hutch-- on April 01, 2018, 02:32:41 AM
Give the struct conversion tool a blast. It gets most of this stuff right. You will sometimes need to edit a data type manually before you hit the convert button, the problem being the VC headers use local #define statements that are hard to track down with a conversion tool.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on April 01, 2018, 02:28:55 PM
Quote from: jj2007 on April 01, 2018, 02:24:23 AM
You can always code a simple example in Micros??t Visual C, build it in 32- and 64-bit mode, and compare the structure's offsets. But trust me, handles are 32/64, and everything that starts with a "p", too.
:t, Yes, thanks.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on April 01, 2018, 02:32:02 PM
Quote from: hutch-- on April 01, 2018, 02:32:41 AM
Give the struct conversion tool a blast. It gets most of this stuff right. You will sometimes need to edit a data type manually before you hit the convert button, the problem being the VC headers use local #define statements that are hard to track down with a conversion tool.

OK, hutch--, Thanks,  you are warmhearted.
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: Mikl__ on April 02, 2018, 09:17:17 PM
Hi, seasea!
asm-file
; GUI #
include win64a.inc
IDM_SAYHELLO equ 0
IDM_GETTEXT equ 1
IDM_CLEAR equ 2
IDM_EXIT equ 3
IDC_EDIT equ 0
IDC_BUTTON equ 1
IDC_EXIT equ 2
IDC_MENU equ 100
IDC_DIALOG equ 200
;-----------------------------------------
.code
WinMain proc
local hMem:QWORD

invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,1024  ; memory buffer size
      mov hMem,rax; hDialogTemplate
mov edi,eax
mov esi,offset temp
mov ecx,len/8
rep movsq
     ;mov [rsp+20h],rcx; dwInitParam=0
mov r9d,offset DialogFunc
invoke DialogBoxIndirectParam,IMAGE_BASE,eax,0,,0
invoke GlobalFree,hMem
leave
retn
WinMain endp
DialogFunc proc hDlg:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
size_of_buffer equ 96
local buffer[size_of_buffer]:BYTE

cmp edx,WM_CLOSE
je wmCLOSE
cmp edx,WM_INITDIALOG
je wmINITDIALOG
cmp edx,WM_COMMAND
jne wmBYE
wmCOMMAND:movzx eax,r8w ;movzx eax,word ptr wParam
or r9,r9 ;cmp lParam,0
jnz @f
jmp [menu_handlers+rax*8]
@@: dec eax ;cmp eax,IDC_BUTTON=1
jne @f
SAYHELLO:mov r8d,offset expTxt
jmp @0
@@: dec eax ;cmp eax,IDC_EXIT=2
jne wmBYE
invoke SendMessage,,WM_CLOSE,0,0
jmp wmBYE
wmINITDIALOG:invoke GetDlgItem,,0
invoke SetFocus,eax
jmp wmBYE
CLEAR:xor r8d,r8d
@0: invoke SetDlgItemText,,0
jmp wmBYE
GETTEXT:lea r8d,buffer
invoke GetDlgItemText,,0,,size_of_buffer
mov r8d,offset AppName
lea edx,buffer
      invoke MessageBox,0,,,MB_OK
jmp wmBYE
wmCLOSE:invoke EndDialog,,0
wmBYE:xor eax,eax
leave
retn
menu_handlers dq SAYHELLO,GETTEXT,CLEAR,wmCLOSE
DialogFunc endp
.data
expTxt db "Wow! I'm in an edit box now",0
AppName db 'Our First Dialog Box',0
align 16
temp:
dd DS_CENTER or WS_CAPTION or WS_MINIMIZEBOX or WS_SYSMENU \
           or WS_VISIBLE or WS_OVERLAPPED or DS_MODALFRAME or DS_3DLOOK,0
dw 3,10,10,205,60,-1,IDC_MENU,0
du <Tutorial 10g: DialogBoxIndirectParam+DlgProc>
dw 0
dd WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_BORDER or WS_TABSTOP,0
dw 15,17,111,13,IDC_EDIT,  -1,81h
dw 0,0,0
dd WS_VISIBLE or WS_CHILD or WS_TABSTOP or BS_DEFPUSHBUTTON,0
dw 141,10,52,13,IDC_BUTTON,-1,80h
du <Say Hello>
dw 0
dd WS_VISIBLE or WS_CHILD or WS_TABSTOP,0     
dw 141,26,52,13,IDC_EXIT,  -1,80h
du <E&xit>
dw 0
len = $ - temp
end     
rc-file#include "resource.h"

#define IDM_SAYHELLO 0
#define IDM_GETTEXT 1
#define IDM_CLEAR 2
#define IDM_EXIT 3
#define IDC_EDIT 0
#define IDC_BUTTON 1
#define IDC_EXIT 2

#define IDC_MENU 100
#define IDC_DIALOG 200

IDC_MENU  MENU
BEGIN
    POPUP "Test Controls"
    BEGIN
        MENUITEM "Say Hello",IDM_SAYHELLO
        MENUITEM "Get Text",IDM_GETTEXT
        MENUITEM "Clear Edit Box",IDM_CLEAR
        MENUITEM SEPARATOR
        MENUITEM "E&xit",IDM_EXIT
    END
END
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on April 04, 2018, 12:13:38 AM
Quote from: Mikl__ on April 02, 2018, 09:17:17 PM
Hi, seasea!
asm-file
; GUI #
.......
.......
temp:
dd DS_CENTER or WS_CAPTION or WS_MINIMIZEBOX or WS_SYSMENU \
           or WS_VISIBLE or WS_OVERLAPPED or DS_MODALFRAME or DS_3DLOOK,0
dw 3,10,10,205,60,-1,IDC_MENU,0
du <Tutorial 10g: DialogBoxIndirectParam+DlgProc>
dw 0
dd WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_BORDER or WS_TABSTOP,0
dw 15,17,111,13,IDC_EDIT,  -1,81h
dw 0,0,0
dd WS_VISIBLE or WS_CHILD or WS_TABSTOP or BS_DEFPUSHBUTTON,0
dw 141,10,52,13,IDC_BUTTON,-1,80h
du <Say Hello>
dw 0
dd WS_VISIBLE or WS_CHILD or WS_TABSTOP,0     
dw 141,26,52,13,IDC_EXIT,  -1,80h
du <E&xit>
dw 0
len = $ - temp
end     
......
......



Yep, that's pretty clear :t
Thank you, Mikl__.

And, one small question, what's the meaning "du", I didn't know it, and I had never used it. :redface:


Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: Mikl__ on April 04, 2018, 01:35:25 AM
Quotewhat's the meaning "du",
Hi, seasea!
It is macro for create unicode-strings, my native language is russian, for cyrillic letters are 0400—04FF, for latin letters are 0041-007A
du macro string
local bslash
bslash = 0
irpc c,<string>
if bslash eq 0
if '&c' eq "/"
        bslash = 1
elseif '&c'gt 127
db ('&c'- 0B0h),4
else
dw '&c'
endif
else
           bslash = 0
           if '&c' eq "n"
           DW 0Dh,0Ah
           elseif '&c' eq "/"
           dw '/'
           elseif '&c' eq "r"
           dw 0Dh
           elseif '&c' eq "l"
           dw 0Ah
           elseif '&c' eq "s"
           dw 20h
           elseif '&c' eq "c"
           dw 3Bh
           elseif '&c' eq "t"
           dw 9
   endif
endif
endm
dw 0
endm
Title: Re: Some structure, like DLGTEMPLATE, disappered in MASM64 ?
Post by: seasea on April 04, 2018, 11:29:08 PM
Quote from: Mikl__ on April 04, 2018, 01:35:25 AM
Quotewhat's the meaning "du",
Hi, seasea!
It is macro for create unicode-strings, my native language is russian, for cyrillic letters are 0400—04FF, for latin letters are 0041-007A

OK, that's pretty good. :t :icon14: