yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1339回复:4

钩子和WINAPI疑问

楼主#
更多 发布于:2004-06-23 09:57
为了钩住OpenClipboard,我定义了Hook_OpenClipboard如下
BOOL WINAPI Hook_OpenClipboard(HWND hWndNewOwner)
{
TRACE("\n!Hook_OpenClipboard\n");
MessageBox(NULL,"OpenClipboard can not run", "PCProtector",MB_OK);
return NULL;
}
为什么要在声明中加WINAPI.
我测试过,不加WINAPI时容易出错
yetty_forever
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-23 10:12
为了钩住OpenClipboard,我定义了Hook_OpenClipboard如下
BOOL WINAPI Hook_OpenClipboard(HWND hWndNewOwner)
{
TRACE("n!Hook_OpenClipboardn");
MessageBox(NULL,"OpenClipboard can not run", "PCProtector",MB_OK);
return NULL;
}
为什么要在声明中加WINAPI.
我测试过,不加WINAPI时容易出错

看看__pascal、__fortran、__cdecl和__stdcall等你就明白了。
以后这样的问题到普通C++论坛问就好了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-23 11:24
我知道这个问题在网上很多,但是大部分只讲各种调用约定之间的区别。我还是不明白为什么要加winapi,试验中不加时钩子也可以成功的,只是特殊情况下异常
yetty_forever
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-06-23 13:13
API函数都是STDCALL的,所以你也必须遵循同样的标准。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
force_eagle
驱动小牛
驱动小牛
  • 注册日期2002-05-06
  • 最后登录2009-02-26
  • 粉丝0
  • 关注0
  • 积分387分
  • 威望61点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-30 18:26
__stdcall调用约定是由被调用程序来负责销毁堆栈的!传入参数固定
Windows中的API都是__stdcall约定!!
__fastcall是由寄存器来传递参数

__cdec是由调用者来销毁堆栈,就可以传递不定个数的参数给调用者
游客

返回顶部