救命:帮忙看看在CB中调试不通过的VC下调却通过的代码

纪俊 2003-01-24 08:37:06
BOOL CKeyhook::starthook()
{
BOOL bResult=false;
glhHook=::SetWindowsHookEx(WH_KEYBOARD_LL,KeyProc,glhInstance,0);
if(glhHook!=NULL)
bResult=true;
return bResult;
}

_declspec(dllexport) LRESULT CALLBACK KeyProc(int nCode,WPARAM wParam,LPARAM

lParam)
{
BOOL fEatKeystroke = FALSE;
if(nCode == HC_ACTION)
{
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p=(PKBDLLHOOKSTRUCT)lParam;
fEatKeystroke=(p->vkCode=VK_TAB);
//MessageBox(NULL,TEXT("ok"),,,MB_OK);
//ShowMessage("ok");
}
}
return(fEatKeystroke?1:CallNextHookEx(glhHook,nCode,wParam,lParam));
}

以上代码在VC下调是通过,在CB5下却提示
Type mismatch in parameter 'lpfn'(wanted 'int(_stdcall*)()',got

'long(_stdcall*)(int,unsigned int,long)')

请高手指点!感激不尽!

还有CB是不是没有析构函数阿?

另外好像LRESULT在CB中是long在VC下却是int,这是怎么回事啊?
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
纪俊 2003-01-25
  • 打赏
  • 举报
回复
是的
感谢上边各位的提示
的却通过了
谢谢!
Libran 2003-01-24
  • 打赏
  • 举报
回复
按照你KeyProc的声明格式,
glhHook = ::SetWindowsHookEx(WH_KEYBOARD_LL,
(int (__stdcall*)())KeyProc, glhInstance, 0);
编译时肯定是可以通过的。
当然,你的glhHook和glhInstance得先正确定义
Jagen在路上 2003-01-24
  • 打赏
  • 举报
回复
这个很正常的,VC不是完全符合ANSI的,我去年三月份写的一段关于DirectShow的程序也遇到过这样的问题,最后我只能用VC写成COM之后,在调用,最有意思的是直接写成DLL也不行,入口函数的地址获得不了!
纪俊 2003-01-24
  • 打赏
  • 举报
回复
还是不可以阿。
函数的实参没有给出。
Libran 2003-01-24
  • 打赏
  • 举报
回复
把类型转换一下试试:
glhHook=::SetWindowsHookEx(WH_KEYBOARD_LL,(int(_stdcall*)())KeyProc,glhInstance,0);

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧