首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

关于RC文件的一个小疑点

2014-04-22 
关于RC文件的一个小问题今天自己动手写个小程序,巩固之前看书学的东西,遇到一个问题很奇怪,很不理解!请看

关于RC文件的一个小问题
今天自己动手写个小程序,巩固之前看书学的东西,遇到一个问题很奇怪,很不理解!
请看代码,很简单,就是写个有菜单项的对话框!
RC文件:

#include<resource.h>

#defineICO_MAIN0x1000
#defineDLG_MAIN0x1000
#defineIDG_PUSHME0x1001
#defineIDM_MAIN0x1000

//#defineIDM_OPTION0x0002
#defineIDM_OPENFILE0x1001
#defineIDM_SAVEAS0x1002
#defineIDM_SETPAGE0x1003
#defineIDM_QUIT0x1004
//#defineIDM_CHECKSTATUS0x0007
#defineIDM_SERCHCHAR0x1005
#defineIDM_EXCHCHAR0x1006
#defineIDM_CHOSFONT0x1007
#defineIDM_CHOSCOLOR0x1008

ICO_MAINICON"my.ico"
DLG_MAINDIALOG50,50,200,150
MENUIDM_MAIN
STYLEWS_CAPTION|WS_SYSMENU|WS_VISIBLE|WS_POPUP|DS_MODALFRAME
CAPTION"通用对话框组件范例"
FONT9,"宋体"
{
PUSHBUTTON"点我",IDG_PUSHME,80,80,35,15,WS_VISIBLE
}
IDM_MAINmenu
BEGIN
POPUP"文件"
BEGIN
menuitem"打开文件",IDM_OPENFILE
menuitem"另存为",IDM_SAVEAS
menuitem"退出",IDM_QUIT
END
POPUP"查看"
BEGIN
menuitem"查找字符串",IDM_SERCHCHAR
menuitem"替换字符串",IDM_EXCHCHAR
menuitem"选择字体",IDM_CHOSFONT
menuitem"选择颜色",IDM_CHOSCOLOR
END
END


源文件如下:
.386
.model flat,stdcall
option casemap:none
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
;includeComdlg32.inc
;includelibComdlg32.lib


ICO_MAINequ1000h
IDM_MAINequ1000h
DLG_MAINequ1000h
IDG_PUSHMEequ1001h
IDM_OPENFILEequ1001h
IDM_SETPAGEequ1002h
IDM_QUITequ1003h
IDM_CHECKSTATUSequ1004h
IDM_SERCHCHARequ1005h
IDM_EXCHCHARequ1006h
IDM_CHOSFONTequ1007h
IDM_CHOSCOLORequ1008h

.data?
hInstancedd?
.code
_DlgProcprocuses ebx esi edi hWnd,uMsg,wParam,lParam
moveax,uMsg
.ifeax==WM_CLOSE
invokeEndDialog,hWnd,NULL
.elseifeax==WM_INITDIALOG
invokeLoadIcon,hInstance,ICO_MAIN
invokeSendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.else
moveax,FALSE
ret
.endif
moveax,TRUE
ret
_DlgProcendp
start:
invokeGetModuleHandle,NULL
movhInstance,eax
invokeDialogBoxParam,hInstance,DLG_MAIN,NULL,offset _DlgProc,NULL
invokeExitProcess,NULL
endstart

如图所示代码,可以正常生成文件,但是无法运行!
我发现只要把:
1.rc文件中,定义的值的16进制前缀0x去掉,
2.把asm文件中,定义的值得16进制后缀h去掉,
就可以正常运行了!可是书本上说的是,rc文件中应该注意书写方式,16进制要写成0x开头,asm文件中要写成结尾带h,为什么在这里反而要将0x和h去掉才可以正常运行呢?我是win7 64位系统
[解决办法]
好像就是在对话框定义里的 MENU 项才有这个问题,其它如 STYLE 或里面空间的定义时使用十六进制是没有问题的。
Masm32 用的也是 c 里面的 rc ,这个没有差异;我试过 rc 5.00.... 和 vc2008 里的 6.0.57... 结果都一样。

收徒之说言重了,有什么问题大家一起探讨吧。
[解决办法]
我试了一下,确实有这个问题,用VC中的RC 6.1.7600.16385编译楼主的资源再连接到exe,程序启动后直接终止了。但是用Borland的brc 5.20编译资源再连接到exe就一切正常。不知道ms怎么搞的。

热点排行