说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

编辑:说三道四文库 发布时间:2018-06-22 11:09
HTML文档下载 WORD文档下载 PDF文档下载
代码如下:
(环境: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
}
}
还嵌汇编啊,看不懂了
你先在最前面来次 MessageBoxA(NULL, "msg", "title", MB_OK);
然后再把 call 那个,改成 MessageBoxA 试试
谢谢vrace,我早就试过了,不行。当然MessageBoxA(NULL,   "msg",   "title",   MB_OK); 是没有问题

上面的代码是判断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
}
}
问题还是前面提到的那个。
call   MessageBox
改成
call dword ptr MessageBox
好像就可以了
估计是因为MessageBox函数是有返回值的...我对汇编不熟...猜的
嵌入汇编,这可不好办。。。
等待高手,顺便帮你顶顶
问题解决了,就是wind_roc说的那样。今天不让结帖。郁闷!
我不懂C++。不过delphi内联汇编实现这个简单。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘