laocaiye 发表于 2025-5-2 08:05:49

编译出错

本人仿照《Windows环境下32位汇编语言设计(典藏版)》Chapter05\Menu程序。Main.rc和Main.asm全部是手动抄写录入的,但是在nmake时,提示如下错误:
对照检查也没看出来错在哪里,先把我手动录入的Main.rc贴出来,麻烦大神帮忙查看下错误在哪里?
//******************************************
#include<resource.h>
//******************************************
#define        ICO_MAIN                0x1000        //图标
//******************************************
#define IDM_MAIN                0x2000        //菜单
#define        IDA_MAIN                0X2000        //加速键
#define        IDM_OPEN                0x4101
#define        IDM_OPTION                0x4102
#define        IDM_EXIT                0x4103
#define        IDM_SETFONT                0x4201
#define        IDM_SETCOLOR        0x4202
#define        IDM_INACT                0x4203
#define        IDM_GRAY                0x4204
#define        IDM_BIG                        0x4205
#define        IDM_SMALL                0X4206
#define        IDM_LIST                0x4207
#define        IDM_DETAIL                0x4208
#define        IDM_TOOLBAR                0x4209
#define        IDM_TOOLBARTEXT        0x4210
#define        IDM_INPUTBAR        0x4211
#define        IDM_STATUSBAR        0x4212
#define        IDM_HELP                0x4301
#define        IDM_ABOUT                0x4302
//****************************************
ICO_MAIN        ICON                "Main.ico"
//****************************************
IDM_MAIN        menu                discardable
BEGIN
        popup        "文件(&F)"
        BEGIN
                menuitem "打开文件(&O)...",        IDM_OPEN
                menuitem "关闭文件(&C)...",        IDM_OPTION
                menuitem separator
                menuitem "退出(&X)",        IDM_EXIT
        END
        popup        "查看(&V)"
        BEGIN
                menuitem        "字体(&F)...\tAlt+F",                IDM_SETFONT
                menuitem        "背景色(&B)...\tCtrl+Alt+B",        IDM_SETCOLOR
                menuitem        separator
                menuitem        "被禁用的菜单项",        IDM_INACT,        INACTIVE
                menuitem        "被灰化的菜单项",        IDM_GRAY,        GRAYED
                menuitem        separator
                menuitem        "大图标(&G)",        IDM_BIG
                menuitem        "小图标(&M)",        IDM_SMALL
                menuitem        "列表(&L)",                IDM_LIST
                menuitem        "详细资料(&D)",        IDM_DETAIL
                menuitem        separator
                popup                "工具栏(&T)"
                BEGIN
                   menuitem        "标准按钮(&S)",        IDM_TOOLBAR
                   menuitem        "文字标签(&C)",        IDM_TOOLBARTEXT
                   menuitem        "命令栏(&I)",        IDM_INPUTBAR
                END
                menuitem       "状态栏(&U)",        IDM_STATUSBAR
        END
        popup        "帮助(&H)",        HELP
        BEGIN
                menuitem "帮助主题(&H)\tF1",        IDM_HELP       
                menuitem separator
                menuitem "关于本程序(&A)...",        IDM_ABOUT
        END
END
//********************************************
IDA_MAIN        accelerators
BEGIN
                VK_F1,        IDM_HELP        VIRTKEY
                "B",        IDM_SETCOLOR,VIRTKEY,CONTROL,ALT
                "F",        IDM_SETFONT,VIRTKEY,ALT
END
//***********************************************

FishC 发表于 2025-5-2 08:06:32

发现两个主要错误,修正后即可编译通过:

1. 头文件引用错误(第一行):
原代码:#include
应改为:#include <resource.h>
缺少头文件名会导致资源编译器找不到定义

2. 加速键表语法错误(倒数第二段):
原代码:

IDA_MAIN        accelerators
BEGIN
    VK_F1,        IDM_HELP        VIRTKEY
    "B",        IDM_SETCOLOR,VIRTKEY,CONTROL,ALT
    "F",        IDM_SETFONT,VIRTKEY,ALT
END

应改为(修正逗号位置和VIRTKEY位置):

IDA_MAIN        accelerators
BEGIN
    VK_F1, IDM_HELP, VIRTKEY
    "B", IDM_SETCOLOR, VIRTKEY, CONTROL, ALT
    "F", IDM_SETFONT, VIRTKEY, ALT
END


特别注意:
1. 每个加速键参数之间需要用逗号分隔
2. VIRTKEY必须作为独立参数出现
3. 检查Main.ico图标文件是否存在于当前目录

修正后的完整资源文件结构:

//******************************************
#include <resource.h>
//******************************************
#define ICO_MAIN      0x1000//图标
...(中间定义保持不变)...
//****************************************
IDA_MAIN    accelerators
BEGIN
    VK_F1,IDM_HELP,       VIRTKEY
    "B",    IDM_SETCOLOR,   VIRTKEY, CONTROL, ALT
    "F",    IDM_SETFONT,    VIRTKEY, ALT
END
//***********************************************


常见其他注意事项:

[*]确保所有菜单项的ID值在0x4101-0x4212范围内没有重复
[*]检查菜单中的中文引号是否使用了半角符号(程序中的引号应为""而非“”)
[*]确认资源文件名与工程文件中的引用一致


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laocaiye 发表于 2025-5-2 08:18:05

还是不行的,提示不是虚拟键问题,而是这一行代码错误   menuitem      "被灰化的菜单项",      IDM_GRAY,      GRAYED
页: [1]
查看完整版本: 编译出错