替换调用替换的send API时出错了,大家进来帮忙看一下哪里有问题  
 我采用《windows核心编程》里面的API替换代码,将另一个进程里面的send API的地址替换为我的函数地址,但是当被替换进程调用send发送数据时,出现了如下错误“Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.”,好像是说我的替换函数的格式与被替换的函数的调用方式不一致,可是我查看vs的 winsock.h,它里面的send定义如下:
int PASCAL FAR send (IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags);
我用完全参照它的格式定义的函数地址去替换它,如下:
int PASCAL FAR mysend(IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags);
但是还是出现了上面提示的错误。下面给出相关代码,请各位指点一下迷津
typedef int (*psend)(SOCKET,const char FAR*,int,int);//原send函数指针定义psend osend = NULL;//定义一个send函数指针//参照send原型定义的自己的send函数
int PASCAL FAR mysend(IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags);
int PASCAL FAR mysend(IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags)
{
MPostMessage(WM_DSEND,0,0);//给我自己的程序发消息,应该不会影响到该调用
return 1;//(osend)(s,buf,len,flags);
}LPCTSTR modname = "wsock32.dll";
HMODULE h = GetModuleHandle(TEXT(modname));
HMODULE hc = GetModuleHandle(NULL);
osend = (psend)GetProcAddress(h,"send");
HookOneAPI(modname,(PROC)osend,(PROC)mysend,hc);//用自己的mysend函数替换原有的send函数
函数的替换是成功的,当原进程调用send时,mysend函数被调用,并发送WM_DSEND消息给我的程序(我的程序确实收到),但最后出现上面描述的错