SetWindowLong使用GWL_WNDPROC参数的问题

nf3 2006-04-09 12:40:03
我用钩子插入DLL后,想替换被插入进程列表视窗口的消息响应函数
以下代码

LRESULT OldLongWinProc=NULL;
LRESULT NewWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);


只要运行到下面这一句,程序就会退出,
编译时出现警告
warning C4311: “类型转换” : 从“LRESULT (__cdecl *)(HWND,UINT,WPARAM,LPARAM)”到“LONG”的指针截断

OldLongWinProc=(LRESULT)SetWindowLong(sg_hwnd,GWL_WNDPROC,(LONG)NewWndProc);



LRESULT NewWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  return(CallWindowProc((WNDPROC)OldLongWinProc,hwnd,uMsg,wParam,lParam));

}
...全文
2204 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nf3 2006-04-18
  • 打赏
  • 举报
回复
ding
nf3 2006-04-16
  • 打赏
  • 举报
回复
各位兄弟,帮帮忙啊?
nf3 2006-04-13
  • 打赏
  • 举报
回复
两位的方法都不行
iswjh 2006-04-10
  • 打赏
  • 举报
回复
OldLongWinProc=(WNDPROC)SetWindowLong(sg_hwnd,GWL_WNDPROC,(LONG)NewWndProc);
soaroc 2006-04-09
  • 打赏
  • 举报
回复
应该是使用(WNDPROC *)进行强制转换吧

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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