Форум программистов, компьютерный форум, киберфорум
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
vita et mortuus
Эксперт по компьютерным сетям
1796 / 696 / 152
Регистрация: 10.06.2009
Сообщений: 2,736
1

MASM64 Menu, Ошибка построения ресурсов

09.04.2015, 09:34. Показов 2769. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я так хотел подружиться с менюшками, но никак.
main.asm
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
option dotname
option casemap:none
option PROLOGUE:rbpFramePrologue
option EPILOGUE:rbpFrameEpilogue
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
include temphls.inc
include win64.inc
include kernel32.inc
include user32.inc
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
includelib kernel32.lib
includelib user32.lib
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
include resource.inc
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.data
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.data?
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.const
wcex WNDCLASSEX <sizeof WNDCLASSEX,CS_HREDRAW or CS_VREDRAW,offset WndProc,0,0,850000h,10027h,10003h,COLOR_WINDOW,NULL,offset szWindowClass, NULL>
    hInstance dd 850000h
    hIcon dq 10027h
    hCursor dq 10003h
    szWindowClass db 'Asm64 window',0
    AppName db 'The window',0
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.code
WinMain proc <12>\ ;parmarea 12*8 bytes 
            hInst:HINSTANCE,\
            hPrevInst:HINSTANCE,\
            CmdLine:LPSTR,\
            CmdShow:DWORD  ; WORD+WORD+DWORD+BYTE
LOCAL msg:MSG
LOCAL hwnd:HWND
    invoke LoadMenu,hInstance,IDR_MENU
    invoke RegisterClassEx,&wcex ;можно написать по старому addr wcex
    invoke CreateWindowEx,\
                NULL,\
                ADDR szWindowClass,\
                ADDR AppName,\
                WS_OVERLAPPEDWINDOW or WS_VISIBLE,\
                dptr CW_USEDEFAULT,\
                dptr CW_USEDEFAULT,\
                dptr CW_USEDEFAULT,\
                dptr CW_USEDEFAULT,\
                NULL,\
                NULL,\
                hInstance,\
                NULL
    lea rdi,msg
    .while TRUE
        invoke GetMessage,rdi,NULL,NULL,NULL
        invoke DispatchMessage,rdi
    .endw
 
    invoke ExitProcess,[rdi][MSG.wParam]
WinMain endp;-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
WndProc proc <4> hWnd:QWORD,uMsg:QWORD,wParam:WPARAM,lParam:LPARAM
    .if     edx==WM_COMMAND
        .if r8==IDR_MENU
        .elseif r8==IDM_TEST
;            invoke MessageBox, 0, &,&,MB_OK
        .elseif r8==IDM_OPEN
;            invoke MessageBox, 0, &,&,MB_OK
        .elseif r8==IDM_SAVE
;            invoke MessageBox, 0, &,&,MB_OK
        .else   r8==IDM_EXIT
            invoke ExitProcess, 0
        .endif
    .elseif edx==WM_DESTROY
    invoke ExitProcess,NULL
    .else
        leavef
        jmp DefWindowProc
    .endif
WndProc endp;-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^
end

resource.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by WinMain.rc
//
#define VER_FILEVERSION    1,0,0,0
#define VER_PRODUCTVERSION 1,0,0,0
 
#define IDR_MENU 0x101
#define IDM_TEST 0x40101
#define IDM_OPEN 0x40102
#define IDM_SAVE 0x40103
#define IDM_EXIT 0x40104
 
#define VER_COMPANYNAME_STR      "Iternal Developers \000"
#define VER_FILEDESCRIPTION_STR  "Description Of Application \000"
#define VER_FILEVERSION_STR      "1.0\000"
#define VER_INTERNALNAME_STR     "Item Name\000"
#define VER_ORIGINALFILENAME_STR "main.exe\000"
#define VER_LEGALCOPYRIGHT_STR   "\251 1995-2015 Iternal Developers. All right!\000"
#define VER_LEGALTRADEMARKS1_STR "VER_LEGALTRADEMARKS1_STR\000"
#define VER_LEGALTRADEMARKS2_STR "VER_LEGALTRADEMARKS2_STR\000"
#define VER_PRODUCTNAME_STR      "Item Name\000"
#define VER_PRODUCTVERSION_STR   "1.0\000"

resource.inc
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
VER_FILEVERSION  equ 1,0,0,0
VER_PRODUCTVERSION  equ 1,0,0,0
 
IDR_MENU equ 101h
IDM_TEST equ 40101h
IDM_OPEN equ 40102h
IDM_SAVE equ 40103h
IDM_EXIT equ 40104h
 
VER_COMPANYNAME_STR      equ "Iternal Developers \000"
VER_FILEDESCRIPTION_STR  equ "Description Of Application \000"
VER_FILEVERSION_STR      equ "1.0\000"
VER_INTERNALNAME_STR     equ "Item Name\000"
VER_ORIGINALFILENAME_STR equ "main.exe\000"
VER_LEGALCOPYRIGHT_STR   equ "\251 1995-2015 Iternal Developers. All right!\000"
VER_LEGALTRADEMARKS1_STR equ "VER_LEGALTRADEMARKS1_STR\000"
VER_LEGALTRADEMARKS2_STR equ "VER_LEGALTRADEMARKS2_STR\000"
VER_PRODUCTNAME_STR      equ "Item Name\000"
VER_PRODUCTVERSION_STR   equ "1.0\000"

rsrc.rc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "resource.h"
 
#include "D:\masm\masm32\include\Resource.h"
//LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
//#
//# Menu
//#
//IDR_MENU MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE
IDR_MENU MENU
{
 POPUP "&File"
        {
        MENUITEM "&Test", IDM_TEST
        MENUITEM "&Open", IDM_OPEN
        MENUITEM "&Save", IDM_SAVE
        MENUITEM "", , 0x0800 // MENUITEM SEPARATOR
        MENUITEM "&Exit", IDM_EXIT
        }
}
 
 
VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION
FILEOS         VOS_UNKNOWN | VOS__WINDOWS32 | VOS_NT_WINDOWS32
FILETYPE VFT_APP
// FILETYPE VFT_DLL
{
  BLOCK "StringFileInfo"
  {
    BLOCK "040904B0"
    {
      VALUE "CompanyName",      VER_COMPANYNAME_STR
      VALUE "FileDescription",  VER_FILEDESCRIPTION_STR
      VALUE "FileVersion",      VER_FILEVERSION_STR
      VALUE "InternalName",     VER_INTERNALNAME_STR
      VALUE "LegalCopyright",   VER_LEGALCOPYRIGHT_STR
      VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR
      VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR
      VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
      VALUE "ProductName",      VER_PRODUCTNAME_STR
      VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
    }
  }
  BLOCK "VarFileInfo"
  {
    VALUE "Translation", 0x409, 1200
  }
}
 
STRINGTABLE
BEGIN
   IDR_MENU   "IDRMENU"
END

make64.bat
Код
@echo off

if not exist rsrc.rc goto empty
D:\masm\masm64\bin\rc /v "rsrc.rc"
D:\masm\masm64\bin\cvtres /machine:x64 "rsrc.res"
:empty

if exist "%1.obj" del "%1.obj"
if exist "%1.exe" del "%1.exe"

D:\masm\masm64\bin\ml64 /c /Cp /I"D:\masm\masm64\include" "%1.asm" "%1.def"
if errorlevel 1 goto errasm

if not exist rsrc.obj goto nores

D:\masm\masm64\bin\Link /LIBPATH:"D:\masm\masm64\lib" /ENTRY:WinMain /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text /ALIGN:16 /stub:stub.exe "%1.obj" "rsrc.obj"
if errorlevel 1 goto errlink

dir "%1.*"
goto TheEnd

:nores
D:\masm\masm64\bin\Link /LIBPATH:"D:\masm\masm64\lib" /ENTRY:WinMain /SUBSYSTEM:WINDOWS /ALIGN:16 /stub:stub.exe "%1.obj"
if errorlevel 1 goto errlink
dir "%1.*"
goto TheEnd

:errlink
echo _
echo Link error
goto TheEnd

:errasm
echo _
echo Assembly Error
goto TheEnd

call "%1.exe"
:TheEnd


Добавлено через 1 минуту
rc.exe и cvtres из amd64 от VisualStudio 2010
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2015, 09:34
Ответы с готовыми решениями:

Обьясните пожалуйста как работает селектор .main-menu > li:hover .sub-menu
&lt;!DOCTYPE html&gt; &lt;html lang=&quot;ru&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; ...

Создать функцию menu или вызвать menu в программе
Всем доброго дня! Нужна помощь в создании функции в виде меню, не понимаю как её сделать, ведь меню...

Компонент menu и menu.section вывести картинку
Здравствуйте, просмотрел все различные тему, перепробовал все приведенные коды, но картинку так и...

не запускается комп.- ошибка BOOT MENU
Всем доброго времени суток! Помогите, сбилось BOOT MENU и комп. не грузится, требует перезагрузку.

6
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
09.04.2015, 10:08 2
NoNaMe,
в фасме меню из ресурсов строится, а вот в масме никак
0
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
09.04.2015, 11:39 3
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
OPTION DOTNAME
option casemap:none
include temphls.inc
include win64.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
OPTION PROLOGUE:rbpFramePrologue
OPTION EPILOGUE:rbpFrameEpilogue
ZZZ_TEST equ 0 
ZZZ_OPEN equ 1 
ZZZ_SAVE equ 2 
ZZZ_EXIT equ 3
.const
wcex label WNDCLASSEX
    cbSize dd sizeof WNDCLASSEX
    style dd 0
    lpfnWndProc dq offset WndProc
    cbClsExtra dd 0
    cbWndExtra dd 0
    hInstance dq 400000h
    hIcon dq 10027h
    hCursor dq 10005h
    hbrBackground dq COLOR_WINDOW
    lpszMenuName dq offset menu_name
    lpszClassName dq offset ClassName
    hIconSm dq 10027h
    ClassName db 'Asm64 window',0
    AppName db 'The window',0
    menu_name db 'ZZZ_Menu',0
    test_msg        db      'You select menu item TEST',0 
open_msg        db      'You select menu item OPEN',0 
save_msg        db      'You select menu item SAVE',0 
menu_handlers dq test_msg, open_msg, save_msg
.code
WinMain proc <12> ;parmarea 12*8 bytes
LOCAL msg:MSG
    invoke RegisterClassEx,&wcex ;можно написать по старому addr wcex
    mov r10d,CW_USEDEFAULT
    xor ebx,ebx
    invoke CreateWindowEx,rbx,addr ClassName,addr AppName,WS_OVERLAPPEDWINDOW or WS_VISIBLE,\
        r10d,r10d,r10d,r10d,rbx,rbx,hInstance,rbx       
    lea rdi,msg
@@:     mov rcx,rdi
    xor edx,edx
    mov r8,rbx
    mov r9,rbx
        call GetMessage
    mov rcx,rdi
        call DispatchMessage
        jmp @b
WinMain endp
WndProc: push rbp
    mov rbp,rsp
    sub rsp,20h
        cmp  edx,WM_COMMAND
        je   wmCOMMAND
    cmp edx,WM_DESTROY
    je wmDESTROY
        leave
        jmp DefWindowProc
wmDESTROY: xor ecx,ecx
        call ExitProcess
wmCOMMAND:     cmp r8,ZZZ_EXIT 
               je   wmDESTROY 
show_msg:       mov r9,rbx;r9=MB_OK
        lea rdx,menu_handlers
        mov rdx,[rdx+r8*8]
               lea r8,menu_name
               call MessageBox
wmBYE:         leave
               retn
end
bat
Кликните здесь для просмотра всего текста
Код
cls
set masm64_path=\masm64\
set filename=%1
%masm64_path%bin\RC /r  %filename%.rc || exit
%masm64_path%bin\cvtres /machine:X64 %filename%.res || exit
%masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include" %filename%.asm || exit
%masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:"%masm64_path%Lib" ^
/entry:WinMain %filename%.obj %filename%.res /LARGEADDRESSAWARE:NO ^
/ALIGN:16 /SECTION:.text,W ^
/BASE:0x400000 /STUB:%masm64_path%\bin\stubby.exe || exit
del %filename%.obj
del %filename%.res
rc
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define ZZZ_TEST 0
#define ZZZ_OPEN 1
#define ZZZ_SAVE 2
#define ZZZ_EXIT 3
 
ZZZ_Menu MENU 
{
    POPUP "&File"
    {       MENUITEM "&Test",ZZZ_TEST
        MENUITEM "&Open",ZZZ_OPEN
        MENUITEM "&Save",ZZZ_SAVE
                MENUITEM SEPARATOR
        MENUITEM "&Exit",ZZZ_EXIT
    }
    MENUITEM "&Exit",ZZZ_EXIT
}
Миниатюры
MASM64 Menu, Ошибка построения ресурсов  
Вложения
Тип файла: zip menu.zip (2.1 Кб, 6 просмотров)
1
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
10.04.2015, 04:44 4
"Причесанный" вариант с менюшкой
Во вложении bat-,asm-,rc-,exe-файлы, а также rc.exe и cvtres.exe
Вложения
Тип файла: zip menu2.zip (71.1 Кб, 14 просмотров)
1
vita et mortuus
Эксперт по компьютерным сетям
1796 / 696 / 152
Регистрация: 10.06.2009
Сообщений: 2,736
10.04.2015, 06:12  [ТС] 5
Mikl___, Я понял в чём была проблема.
При линковке нужно указывать именно ресурс rsrc.res, а я думал как по старинке прилинковать обектник.
Код
rem %masm64_path%bin\cvtres /machine:X64 %filename%.res || exit Эту строчку можно выкинуть. =)
Ресурсы собираются на только по имени.
И заставить менюшку появиться удалось, только через создание WNDCLASSEX Структуры.
Фишка с menu_handlers в вашем примере будет работать только если используются короткие id ресурсов.
Что-то непонятное с работой длинных ID ресурсов, нужен макрос.
0
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
10.04.2015, 06:18 6
NoNaMe,
ничего подобного, у меня ресурс имеет то же имя что и асм-файл, при этом всё собирается нормально
0
vita et mortuus
Эксперт по компьютерным сетям
1796 / 696 / 152
Регистрация: 10.06.2009
Сообщений: 2,736
10.04.2015, 12:11  [ТС] 7
main.asm
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
option dotname
option casemap:none
option PROLOGUE:rbpFramePrologue
option EPILOGUE:rbpFrameEpilogue
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
include temphls.inc
include win64.inc
include kernel32.inc
include user32.inc
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
includelib kernel32.lib
includelib user32.lib
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
include resource.inc
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.data
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.data?
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.const
.const
wcex label WNDCLASSEX
    cbSize dd sizeof WNDCLASSEX
    style dd 0
    lpfnWndProc dq offset WndProc
    cbClsExtra dd 0
    cbWndExtra dd 0
    hInstance dq 400000h
    hIcon dq 10027h
    hCursor dq 10005h
    hbrBackground dq COLOR_WINDOW
    lpszMenuName dq offset menu_name
    lpszClassName dq offset szWindowClass
    hIconSm dq 10027h
    szWindowClass db 'Asm64 window',0
    AppName db 'The window',0
    menu_name db 'IDR_MENU',0
test_msg        db      'You select menu item TEST',0 
open_msg        db      'You select menu item OPEN',0 
save_msg        db      'You select menu item SAVE',0 
menu_handlers dq test_msg, open_msg, save_msg
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.code
WinMain proc <12>\ ;parmarea 12*8 bytes 
            hInst:HINSTANCE,\
            hPrevInst:HINSTANCE,\
            CmdLine:LPSTR,\
            CmdShow:DWORD  ; WORD+WORD+DWORD+BYTE
LOCAL msg:MSG
LOCAL hwnd:HWND
    invoke RegisterClassEx,&wcex ;можно написать по старому addr wcex
    invoke CreateWindowEx,\
                NULL,\
                ADDR szWindowClass,\
                ADDR AppName,\
                WS_OVERLAPPEDWINDOW or WS_VISIBLE,\
                dptr CW_USEDEFAULT,\
                dptr CW_USEDEFAULT,\
                dptr CW_USEDEFAULT,\
                dptr CW_USEDEFAULT,\
                NULL,\
                NULL,\
                hInstance,\
                NULL
    lea rdi,msg
    .while TRUE
        invoke GetMessage,rdi,NULL,NULL,NULL
        invoke DispatchMessage,rdi
    .endw
 
    invoke ExitProcess,[rdi][MSG.wParam]
WinMain endp;-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
WndProc proc <4> hWnd:QWORD,uMsg:QWORD,wParam:WPARAM,lParam:LPARAM
    .if     edx==WM_COMMAND
        .if r8==IDM_EXIT
            invoke ExitProcess, 0
        .else
            invoke MessageBox, 0, menu_handlers[r8*8], &menu_name,0
            leavef
            retn
        .endif
    .elseif edx==WM_DESTROY
    invoke ExitProcess,NULL
    .else
        leavef
        jmp DefWindowProc
    .endif
WndProc endp;-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^
end

resource.h
Код
#define VER_FILEVERSION   1,0,0,0
#define VER_PRODUCTVERSION   1,0,0,0

#define IDM_TEST  0x00
#define IDM_OPEN  0x01
#define IDM_SAVE  0x02
#define IDM_EXIT  0x03

#define VER_COMPANYNAME_STR       "Iternal Developers \000"
#define VER_FILEDESCRIPTION_STR   "Description Of Application \000"
#define VER_FILEVERSION_STR       "1.0\000"
#define VER_INTERNALNAME_STR      "Item Name\000"
#define VER_ORIGINALFILENAME_STR  "main.exe\000"
#define VER_LEGALCOPYRIGHT_STR    "\251 1995-2015 Iternal Developers. All right!\000"
#define VER_LEGALTRADEMARKS1_STR  "VER_LEGALTRADEMARKS1_STR\000"
#define VER_LEGALTRADEMARKS2_STR  "VER_LEGALTRADEMARKS2_STR\000"
#define VER_PRODUCTNAME_STR       "Item Name\000"
#define VER_PRODUCTVERSION_STR    "1.0\000"

resource.inc
Код
VER_FILEVERSION  equ 1,0,0,0
VER_PRODUCTVERSION  equ 1,0,0,0

IDM_TEST equ 0h
IDM_OPEN equ 1h
IDM_SAVE equ 2h
IDM_EXIT equ 3h

VER_COMPANYNAME_STR      equ "Iternal Developers \000"
VER_FILEDESCRIPTION_STR  equ "Description Of Application \000"
VER_FILEVERSION_STR      equ "1.0\000"
VER_INTERNALNAME_STR     equ "Item Name\000"
VER_ORIGINALFILENAME_STR equ "main.exe\000"
VER_LEGALCOPYRIGHT_STR   equ "\251 1995-2015 Iternal Developers. All right!\000"
VER_LEGALTRADEMARKS1_STR equ "VER_LEGALTRADEMARKS1_STR\000"
VER_LEGALTRADEMARKS2_STR equ "VER_LEGALTRADEMARKS2_STR\000"
VER_PRODUCTNAME_STR      equ "Item Name\000"
VER_PRODUCTVERSION_STR   equ "1.0\000"

rsrc.rc
Код
#include "resource.h"

#include "D:\masm\masm32\include\Resource.h"
//LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
//#
//# Menu
//#
//IDR_MENU MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE
IDR_MENU MENU
{
 POPUP "&File"
        {
        MENUITEM "&Test", IDM_TEST
        MENUITEM "&Open", IDM_OPEN
        MENUITEM "&Save", IDM_SAVE
        MENUITEM SEPARATOR//MENUITEM "", , 0x0800//
        MENUITEM "&Exit", IDM_EXIT
        }
 MENUITEM "&Exit", IDM_EXIT
}


VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION
FILEOS         VOS_UNKNOWN | VOS__WINDOWS32 | VOS_NT_WINDOWS32
FILETYPE VFT_APP
// FILETYPE VFT_DLL
{
  BLOCK "StringFileInfo"
  {
    BLOCK "040904B0"
    {
      VALUE "CompanyName",      VER_COMPANYNAME_STR
      VALUE "FileDescription",  VER_FILEDESCRIPTION_STR
      VALUE "FileVersion",      VER_FILEVERSION_STR
      VALUE "InternalName",     VER_INTERNALNAME_STR
      VALUE "LegalCopyright",   VER_LEGALCOPYRIGHT_STR
      VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR
      VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR
      VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
      VALUE "ProductName",      VER_PRODUCTNAME_STR
      VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
    }
  }
  BLOCK "VarFileInfo"
  {
    VALUE "Translation", 0x409, 1200
  }
}

make64.bat
Код
@echo off

if not exist rsrc.rc goto empty
D:\masm\masm64\bin\rc /r /v "rsrc.rc"
rem D:\masm\masm64\bin\cvtres /machine:x64 "rsrc.res"
:empty

if exist "%1.obj" del "%1.obj"
if exist "%1.exe" del "%1.exe"

D:\masm\masm64\bin\ml64 /c /Cp /I"D:\masm\masm64\include" "%1.asm" "%1.def"
if errorlevel 1 goto errasm

if not exist rsrc.res goto nores

D:\masm\masm64\bin\Link /LIBPATH:"D:\masm\masm64\lib" /ENTRY:WinMain /SUBSYSTEM:WINDOWS /LARGEADDRESSAWARE:NO /SECTION:.text,W /BASE:0x400000 /ALIGN:16 /stub:stub.exe "%1.obj" "rsrc.res"
if errorlevel 1 goto errlink

dir "%1.*"
goto TheEnd

:nores
D:\masm\masm64\bin\Link /LIBPATH:"D:\masm\masm64\lib" /ENTRY:WinMain /SUBSYSTEM:WINDOWS /ALIGN:16 /stub:stub.exe "%1.obj"
if errorlevel 1 goto errlink
dir "%1.*"
goto TheEnd

:errlink
echo _
echo Link error
goto TheEnd

:errasm
echo _
echo Assembly Error
goto TheEnd

call "%1.exe"
:TheEnd

Я вот так собираю.

Добавлено через 3 часа 13 минут

Не по теме:

Mikl___, Спасибо за интересные примеры.
Мне очень нравятся возможности FASM и подход к макросам то-же.

1
10.04.2015, 12:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2015, 12:11
Помогаю со студенческими работами здесь

Ошибка в работе виджета Vertical Mega Menu
Уважаемы е форумчане, проблема такая. Установил указанный в теме виджет и если пункт меню...

Ошибка при нажатии на один из компонентов Main.Menu
Доброго вечера, форумчане! Нужна срочная помощь, программа написана, но есть одно НО: при запуске...

Masm64
Пыталась написать программу на masm64, но компилятор то библиотеку не открывает, то команда...

masm64 и winAPI
Здравствуйте. даже не знаю в какую тему писать, с получившейся проблемой. Нужно написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru