当前位置: 代码迷 >> 汇编语言 >> help,搞了好几天了…
  详细解决方案

help,搞了好几天了…

热度:114   发布时间:2016-05-02 04:32:54.0
help,弄了好几天了……
#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)\tF1",HELP
BEGIN
menuitem "帮组主题(&H)",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

上面是资源文件,就是造着罗云彬的书敲下来的,下面试asm文件
invoke	LoadMenu,hInstance,IDM_MAIN
mov hMenu,eax
invoke LoadAccelerators,hInstance,IDA_MAIN
mov @hAccelerator,eax

为什么loadmenu函数返回值始终为零,下一个也是,找不到错误啊,都快疯了,解决不了这个问题我都不知道怎么继续学了
------解决方案--------------------
返回 NULL,就两个参数,要么是 hInstance 不对,要么就是 IDM_MAIN/IDA_MAIN 不对;前者不对,可能是没有调用 GetModuleHandle() 然后设置它?后者不对,asm 和 rc 里定义的不一致?
直接上面的 rc 文件,再加上下面的 asm 生成的 exe 是正常的。
IDM_MAIN	=	2000H
IDA_MAIN = 2000H
; ....
invoke GetModuleHandle, NULL
mov hInstance, eax

; 上面是资源文件,就是造着罗云彬的书敲下来的,下面试asm文件
invoke LoadMenu,hInstance,IDM_MAIN
  相关解决方案