我自己做个一个钩子DLL然后用EXE调用结果“读取函数地址错误”怎么回事?
FARPROC lpfn;
HINSTANCE hinst;
hinst=AfxLoadLibrary("gouzi.dll");
if(hinst==NULL)
{
AfxMessageBox("载入DLL失败");
return;}
lpfn=GetProcAddress(hinst,"CKeyboardHook");
if(lpfn==NULL)
{
AfxMessageBox("读取函数地址失败");
return;
}
lpfn();

}下面是DLL的头文件
class AFX_EXT_CLASS CKeyboardHook : public CObject  
{
public:
      CKeyboardHook();//钩子类的构造函数      virtual ~CKeyboardHook();//钩子类的析构函数public:
      BOOL StartHook(); //安装钩子函数      BOOL StopHook();//卸载钩子函数 
};DEF里面的声明
SECTIONS
mydata READ WRITE SHAREDCCP文件的头部
#pragma data_seg("mydata")
      HHOOK glhHook=NULL;         //安装的鼠标勾子句柄 
      HINSTANCE glhInstance=NULL; //DLL实例句柄
#pragma data_seg()请问问题到底出现在什么地方???

解决方案 »

  1.   

    你的CKeyboardHook是一个类名,不是函数名啊.
    根本上说你这种用法是错误的.应该说就不叫钩子,而是主动调用一个API而已.
    钩子函数是在注册后由操作系统来调用的,而不是应用程序本身.
    建议你先看看MSDN里关于钩子是如何使用的.
      

  2.   

    这个是我拷贝别人的源吗..原版是这样的,DLL的功能是监视键盘的,并且把监视结果写到一个文本里,DLL是单独的代码.EXE是单独的.DLL没有做任何修改.我自己做了一个EXE想调用这个DLL,但就是不成功,因为我弄不清哪个是DLL的函数.
      

  3.   

    看MSDN吧
    抄代码就要付出这个代价,自己写出来的就不会郁闷了.
      

  4.   

    晕了关键我就没MSDN...再说都是英文的我也看不懂...
      

  5.   

    windows 核心编程
    里面有讲过