大家知道在C++builder6中调用Windows对话框API函数如下:
MessageBox(0,"Hello world","提示",MB_OK+MB+ICONINFORMATION);
或
MessageBox(this->Handle,"Hello world","提示",MB_OK+MB+ICONINFORMATION);区别是第一个参数,按上述两种方法,将参数压栈就可以了.
在C++builder中调用内嵌汇编语言,编写对话框如下:
第一方法:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char text[] = "Hello world";
char tip[] = "提示";
asm
{
push MB_OK OR MB_ICONINFORMATION //第4个参数
lea eax, [tip] //第3个参数
push eax
lea eax, [text] //第2个参数
push eax
push 0 ;//第1个参数
call MessageBox
}
}
第二种方法:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char text[] = "Hello world";
char tip[] = "提示";
HWND hwnd;
asm
{
push NULL
call GetModuleHandle
mov hwnd,eax
push MB_OK OR MB_ICONINFORMATION //第4个参数
lea eax, [tip] //第3个参数
push eax
lea eax, [text] //第2个参数
push eax
mov eax,hwnd //第1个参数
push eax;
call MessageBox
}
}
API函数的参数,一般是按__StdCall格式声明,压栈顺序为从右到左。lea是将一个地址装入寄存中,mov是将值放入寄存器中,[]是用来取地址内容(中间包含的值是一个地址),相当C语言中的*p