我自己写程序测试:
VC6
////////////////////
void CCallTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString tmp = "okhere";
MsgBox();
}
void CCallTestDlg::MsgBox()
{
//SetWindowText("testforcall");
MessageBox("testforcall");
}
////////////////////////////
OD 汇编代码:
00401497 . 8BF1 mov esi, ecx
00401499 . 68 20304000 push 00403020 ; okhere
0040149E . 8D4C24 08 lea ecx, dword ptr [esp+8]
004014A2 . E8 61020000 call <jmp.&MFC42.#537_CString::CString>
004014A7 . 8BCE mov ecx, esi
004014A9 . C74424 10 000>mov dword ptr [esp+10], 0
004014B1 . E8 2A000000 call 004014E0
004014B6 . 8D4C24 04 lea ecx, dword ptr [esp+4]
004014BA . C74424 10 FFF>mov dword ptr [esp+10], -1
004014C2 . E8 17020000 call <jmp.&MFC42.#800_CString::~CString>
004014C7 . 8B4C24 08 mov ecx, dword ptr [esp+8]
004014CB . 5E pop esi
004014CC . 64:890D 00000>mov dword ptr fs:[0], ecx
004014D3 . 83C4 10 add esp, 10
004014D6 . C3 retn
///////////////////////////////////
很明显 004014B1 . E8 2A000000 call 004014E0
这个就是 MsgBox()函数调用;
_asm
{
pushad
call 004014E0
popad
}
为什么失败了。。。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!