用汇编调用messagebox总出错, 请高手指点

foxavideo 2007-12-27 10:05:22
代码如下:
(环境:windows XP, vc6.0)
void TestEqual( int a, int b )
{
const char *pE = "a equal b";
const char *pNE = "a not equal b";
const char *pTitle = "title";
__asm
{
push edx
mov edx, a
cmp edx, b
jne noteq
push 0
push DWORD ptr [pTitle]
push DWORD ptr [pE]
push 0
call MessageBox // 调用这里时抛出异常,
noteq: push 0
push DWORD ptr [pTitle]
push DWORD ptr [pNE]
push 0
call MessageBox
pop edx
}
}
...全文
271 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnsyzb 2009-10-25
  • 打赏
  • 举报
回复
我不懂C++。不过delphi内联汇编实现这个简单。
foxavideo 2007-12-27
  • 打赏
  • 举报
回复
问题解决了,就是wind_roc说的那样。今天不让结帖。郁闷!
visame 2007-12-27
  • 打赏
  • 举报
回复
嵌入汇编,这可不好办。。。
等待高手,顺便帮你顶顶
wind_roc 2007-12-27
  • 打赏
  • 举报
回复
call MessageBox
改成
call dword ptr MessageBox
好像就可以了
估计是因为MessageBox函数是有返回值的...我对汇编不熟...猜的
foxavideo 2007-12-27
  • 打赏
  • 举报
回复
上面的代码是判断2数是不是相等,相等就弹出相等的消息框,不相等就弹出不相等的消息框。功能上有点问题,我现改一下:
void TestEqual( int a, int b )
{
const char *pE = "a equal b";
const char *pNE = "a not equal b";
const char *pTitle = "title";
__asm
{
push edx
mov edx, a
cmp edx, b
jne noteq
push 0
push DWORD ptr [pTitle]
push DWORD ptr [pE]
push 0
call MessageBoxA
jmp enif
noteq: push 0
push DWORD ptr [pTitle]
push DWORD ptr [pNE]
push 0
call MessageBoxA
enif:
pop edx
}
}
问题还是前面提到的那个。
foxavideo 2007-12-27
  • 打赏
  • 举报
回复
谢谢vrace,我早就试过了,不行。当然MessageBoxA(NULL, "msg", "title", MB_OK); 是没有问题

vrace 2007-12-27
  • 打赏
  • 举报
回复
你先在最前面来次 MessageBoxA(NULL, "msg", "title", MB_OK);
然后再把 call 那个,改成 MessageBoxA 试试
vecshid 2007-12-27
  • 打赏
  • 举报
回复
还嵌汇编啊,看不懂了

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧