注册 登录
编程论坛 汇编论坛

编译时出现这样的问题

Franziska 发布于 2009-09-26 20:17, 1962 次点击
在学习罗云并汇编第五章时候,一出来老罗就给了一个.rc文件,因为不知道老罗自己写的那个nmake是怎么回事,我用东海一鱼教我办法编译了这个.rc文件,结果出现这样的错误。


[ 本帖最后由 Franziska 于 2009-9-26 20:19 编辑 ]
22 回复
#2
Franziska2009-09-26 20:19
图片没有上去。

menu.rc (57): error RC2104 : undefined keyword or key name: Ox4101


#3
zklhp2009-09-26 21:13
因为不知道老罗自己写的那个nmake是怎么回事

这个前面讲了

再有 老罗 和 罗云彬不是一个人~
#4
东海一鱼2009-09-27 12:02
nmake是一种自动化编译、链接维护工具,它是根据make文件分析其中的相互依赖关系,并根据时间标记自动构建目标文件。

它内部还是调用rc.exe来编译*.rc资源文件。

这种思想用来处理大的工程组非常好,可是我觉得在汇编中维护make文件并不省心。所以我一般都用批处理来构筑工程。

#5
Franziska2009-09-27 12:03
⊙﹏⊙b汗!


#6
Franziska2009-09-27 12:05
谢谢东海一鱼,那你告诉我一下那个错误是什么意思:menu.rc (57): error RC2104 : undefined keyword or key name: Ox4101
#7
东海一鱼2009-09-27 15:01
它是说你的这个资源类型关键字无法识别。


你把这个rc文件发上来吧,我看看。我没有罗Sir的书。
#8
Franziska2009-09-27 17:14
#include                   <resource.h>
 
#define ICO_MAIN                           Ox1000   //图标
 
#define IDM_MAIN                           Ox2000   //菜单
 
#define IDA_MAIN                           Ox2000   //加速键
 
#define IDM_OPEN                           Ox4101
 
#define IDM_OPTION               Ox4102
 
#define IDM_EXIT                           Ox4103   
 
#define IDM_SETFONT              Ox4201
 
#define IDM_SETCOLOR             Ox4202
 
#define IDM_INACT                Ox4203
 
#define IDM_GRAY                 Ox4204
 
#define IDM_BIG                  Ox4205
 
#define IDM_SMALL                Ox4206
 
#define IDM_LIST                 Ox4207
 
#define IDM_DETAIL               Ox4208
 
#define IDM_TOOLBAR              Ox4209
 
#define IDM_TOOLBARTEXT          Ox4210
 
#define IDM_INPUTBAR             Ox4211
 
#define IDM_STATUSBAR            Ox4212
 
#define IDM_HELP                 Ox4301
 
#define IDM_ABOUT                Ox4302
 
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
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
 
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

就是这个。

感谢东海一鱼
#9
chenaiyuxue2009-09-27 18:02
HELP没有定义,把Popup  "帮助(&H)" ,HELP改成Popup "帮助(&H)"  
#10
东海一鱼2009-09-27 21:52
看了一下,发现是文本宏替换的问题。

也就是说menuitem   "打开文件(&O)...",IDM_OPEN 改为menuitem         "打开文件(&O)...",0x4101这样就行了。

上面你的定义是 #define IDM_OPEN  0x4101 到这里被替换为文本,非数字ID,所以rc认为它是一个为定义的关键字。
#11
东海一鱼2009-09-27 22:11
我再看,晕死!!!!!!!!!!!!!!!

老兄,你想‘玩’死我啊。你的0Xxxxx全是O(字母O欧)不是0(数字)。难怪宏替换错误!
程序代码:
#define ICO_MAIN                           Ox1000   //图标  
 
#define IDM_MAIN                           Ox2000   //菜单  
 
#define IDA_MAIN                           Ox2000   //加速键  
 
#define IDM_OPEN                           Ox4101  
 
#define IDM_OPTION               Ox4102  
 
#define IDM_EXIT                           Ox4103     
 
#define IDM_SETFONT              Ox4201  


[ 本帖最后由 东海一鱼 于 2009-9-27 22:13 编辑 ]
#12
Franziska2009-09-28 11:14
?????
没有玩你的意思,我是从罗云并的书上摘抄下来的。
#13
Franziska2009-09-28 11:17
完全的复制黏贴。
#14
东海一鱼2009-09-29 17:52


害我视力下降!!

给你出道作业题:

把一个*.mid(音乐文件)作为资源打包到你的可执行文件中。并在程序运行中播放它。
#15
Franziska2009-09-30 14:27
谢谢!
试一试。
#16
Franziska2009-10-01 16:20
首先向你表达节日的问候。

这个是我的作业:
.rc文件
#include <resource.h>
#define IDI_IMID1   0x1009
 
IDI_IMID1   IMID1    "流年.mid"

编译成功!


.asm
                .386
                .model flat,stdcall
                option casemap:none
 
; Include 文件定义
include         windows.inc
include         user32.inc
includelib      user32.lib
include         kernel32.inc
includelib      kernel32.lib
 
IDI_IMID1 equ 1009h
 
; 数据段
                .data
szCaption       db      'A MessageBox !',0
szText          db      'Hello, World !',0
 
; 代码段
                .code
start:
                invoke  MessageBox,NULL,offset szText,offset szCaption,MB_OK
                invoke  ExitProcess,NULL
                end     start

编译失败,报错invalid or corrupt file

⊙﹏⊙b汗
#17
Franziska2009-10-01 16:22
fatal error LNK1136: invalid or corrupt file
#18
Franziska2009-10-01 16:26
上述问题已经解决,但是只出现一个窗口,没有播放音乐。
#19
东海一鱼2009-10-01 20:14
呵呵,祖国节日。同喜同贺!!

另外:
要播放midi你必须用播放midi的API播放它才行,它自己是不会发声的。

一个最简单的MIDI音乐的播放方法 ---- 使用DirectMusic高层库.
虽然利用MCI的高层也可以播放,但它似乎不支持内存载入,
而且无法避免与其他MIDI音乐的同时播放的冲突.
#20
东海一鱼2009-10-01 20:51
回复 17楼 Franziska
放一个用Free Pascal写的Midi Demo。没有用资源文件的形式。用了直接内存数据定义,呵呵。

只有本站会员才能查看附件,请 登录
#21
Franziska2009-10-02 11:26
谢谢,好好学习一下。
#22
樱释2009-10-03 18:05
我是新手,大家多关照啊
#23
stevehjl2009-10-12 16:32
ss
1