将引用对象从win32 dll传递到mfc dll



我使用裸函数钩住了一个导出的MFC DLL函数。

裸函数的定义如下:

__declspec(裸)static void __cdecl GenericHook(void*__this,类CScrollViewAccess*objParam1,类CRect&objParam2,无符号int iParam1,无符号long iParam2,char*szParam1,void*vParam1,类CFont*objParam3,类CFont*objParam4,类CBrush*objParam5){/*函数体启动*/__asm pushad;/*第一个"自变量",也用于存储寄存器*/__asm推送ecx;/*填充以便ebp+8引用第一个"参数"*//*建立标准序言*/__asm推送ebp;__asm-mov ebp,尤指;__asm-sub-sesp,__LOCAL_SIZE;if(flg==false){//RECT*rct=relpret_cast(&objParam2);hInst=加载库("C:\\Sample.dll");///MFC DllfuncPTR=(CMYCLASS_)(((int)hInst)+(((整数)0x00001032));funcPTR(__this,objParam2);/*标准结语*/__asm-mov esp,ebp;__asm-pop-ebp;__asm-pop-ecx;/*透明填充*/__asm-popad;/*清除第一个"论点"*/__asm-jmp[蹦床];}/*功能体端*/

Mfc dll具有以下功能:

void CMyClass::returnRect(类CRect&objParam){int width=objParam.width();int height=objParam.height();CPoint pt=objParam.TopLeft();文件*fp;char szEnter[6]={13,0,10,0,0};fp=fopen("c:\\LogFolder\\log.txt","ab+");fprintf(fp,"宽度:%d高度:%d X坐标:%d Y坐标:%d\n%s",宽度,高度,pt.X,pt.Y,szEnter);fclose(fp);}

在通过CRect&MFC DLL的参数,则记录的值是错误的。

如何处理引用对象?

我已经解决了这个挂钩问题,如下所示:

extern"C"__declspec(裸)__declsspec(dllexport)void __stdcall GenericHook(){/*函数体启动*//*建立标准序言*/__asm推送ebp;__asm-mov ebp,尤指;__asm-pushad;//__asm sub esp,__LOCAL_SIZE;//增加堆栈大小__asm-mov eax,[ebp+4]//退货地址__asm-mov objParam1,eax;__asm-mov eax,DWORD ptr[ebp+8]//arg1__asm-mov objParam2,eax;__asm-mov eax,DWORD ptr[ebp+12]//arg2__asm-mov objParam3,eax;__asm-mov eax,DWORD ptr[ebp+16]//arg3__asm-mov objParam4,eax;__asm-mov eax,DWORD ptr[ebp+20]//arg4__asm-mov objParam5,eax;/*-------------处理开始---------------------*/fp=fopen("c:\\LogFolder\\log.txt","ab+");fprintf(fp,"arg1:%lu~arg2:%lu~rg3:%lu~arg4:%lu~ar5:%lu\n",objParam1、objParam2、objaram3、objParam4、objPara5);fprintf(fp,"================================================\n\n");fclose(fp);/*-------------处理结束-----------------------*//*标准结语__asm添加esp,__LOCAL_SIZE*/__asm-popad;__asm-mov esp,ebp;__asm-pop-ebp;__asm-jmp[蹦床];}

最新更新