[100分,照书抄的,居然运行不了。天热,请帮忙看完] 关 于 全 局 钩 子

KaKaKaKa 2010-06-17 10:41:12
(天热,请大家帮忙看完) 代码不长,不多说了,直接看:

下面这个是Hook.cpp文件的代码,最后生成Hook.dll文件的

#include <windows.h>

HHOOK g_hMouse;
HINSTANCE g_hInst;

BOOL WINAPI DllMain( HINSTANCE hModule,DWORD dwReason,LPVOID lpvReserved )
{
g_hInst=hModule; //dll被加载时会传递一个该模块的句柄hModule
}

LRESULT CALLBACK MouseProc( //鼠标钩子过程
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
return 1; //返回非0值表示已经处理,无须向下传递了。
}

void SetHook()
{
g_hMouse = ::SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInst,0);//最后个参数0表示此钩子过程与运行在同一桌面下的所有线程相关了,即全局钩子。
}



接下来是模板定义文件Hook.def的内容,用于在dll中导出函数

LIBRARY "Hook"

EXPORTS
SetHook



接着生成了Hook.dll,就开始调用了。下面是HookTestDlg.cpp中调用dll函数的代码:

#include "stdafx.h"
#include "HookTest.h"
#include "HookTestDlg.h"

#pragma comment(lib, "..\\Release\\Hook.lib") //链接引入库文件

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

......

_declspec(dllimport) void SetHook(); //函数声明,_declspec(dllimport)表示来自外部dll文件

BOOL CHookTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);

// TODO: 在此添加额外的初始化代码

SetHook(); //调用dll中的函数。 编译没问题, 为什么运行到这里就失败了呢?弹出一个框,提示:应用程序初始化(0xc0000142)失败。

return TRUE;
}


问题就在SetHook();那行。不知道什么原因,请高手释疑,谢谢。
...全文
227 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 allen_zhang 的回复:]
运行的时候dll需要和你的exe同一个目录的
[/Quote]

是的 I'm sure.

各位看看 我代码没什么问题吧?~
Allen_zhang 2010-06-17
  • 打赏
  • 举报
回复
运行的时候dll需要和你的exe同一个目录的
angloy 2010-06-17
  • 打赏
  • 举报
回复
运行时的目录和编译时的目录好像 是不一样的吧
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
各个目录我都放过了 不对
而且如果是位置错误 在链接时就应该出错了 我编译链接是通过的 在运行时出错了
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
不是Dll位置的问题吧~
我将Dll放到Release目录和当前目录下都试过了 还是那个问题耶
sharp0309 2010-06-17
  • 打赏
  • 举报
回复
呵呵 DLL放在工程目录下!!你仔细看下!!
wltg2001 2010-06-17
  • 打赏
  • 举报
回复
你的DLL放到了调用程序同一个目录中去了吗
踏实每一步 2010-06-17
  • 打赏
  • 举报
回复
应该是dll文件位置不对,你不会放也release下了吧。
stonewater 2010-06-17
  • 打赏
  • 举报
回复
你可以把exe和dll一起调试的啊
magic7004 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yangjianpro_hotmail 的回复:]

.dll或者.lib的位置绝对不会错的
郁闷ing
[/Quote]

不要这么绝对吧,我看一定是.dll位置错了
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
.dll或者.lib的位置绝对不会错的
郁闷ing
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
VS2008下编写的
有VS08的朋友可以帮测试下 很短的代码
hzy694358 2010-06-17
  • 打赏
  • 举报
回复
__declspec(dllexport) void SetHook()
{

}
qq14923349 2010-06-17
  • 打赏
  • 举报
回复
是孙鑫的吧
笑而不语
我已经在他的基础上捆绑了文件和修改开机注册表
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 hzy694358 的回复:]
Hook.h
怎么写的?

g_hMouse = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,g_hInst,0);
[/Quote]

只是个全局钩子的小测试程序,没写Hook.h 就一个Hook.cpp
iqyely 2010-06-17
  • 打赏
  • 举报
回复
来学习下。
hzy694358 2010-06-17
  • 打赏
  • 举报
回复
Hook.h
怎么写的?

g_hMouse = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,g_hInst,0);
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
谢谢所有路过这里帮我看代码的朋友 谢谢你们

我找到问题所在了,现告诉大家:

注意看我的DllMain函数,是不是少了个return语句啊~ 哈哈

一个小疏漏居然折腾到现在,要命的是这个错误VS居然编译不报出来

汗呐~

那个书上也没有return 再汗

各位引以为戒啊~ 别像我这么粗心

谢谢各位 100分散给全部
「已注销」 2010-06-17
  • 打赏
  • 举报
回复
建议 g_hInst 用 Loadlibrary 获取
KaKaKaKa 2010-06-17
  • 打赏
  • 举报
回复
dll工程是Win32的空工程

Test工程是MFC的
加载更多回复(11)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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