这是我的def文件:
; WndDll.def : 声明 DLL 的模块参数。LIBRARY  WndDllEXPORTS
RunHook @2
StopHook @3这是RunHook定义:
BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId)
{
HWndHook=::SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HOOKProc,hMod,dwThreadId);
return TRUE;
}这是全局声明:
typedef BOOL (_stdcall *funRunHook)(HMODULE hModule,DWORD dwThreadID);这两种调用都不行:
funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,"RunHook");funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,MAKEINTRESOURCE(2));
我采用的是VS2008,项目属性:动态库(.dll),MFC使用静态链接!
我分不多,希望大家能不吝赐教啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    怎么个不行?返回值为NULL?调用GetLastError()返回值是什么?
      

  2.   

    你的hMod值为多少 有木有load?
      

  3.   

    GetLastError是什么,,..还有就是,你说的问题究竟是什么问题,返回值有什么问题了
      

  4.   

    hMod是有返回值的,经过测试,正常!! GetlastError返回值127
      

  5.   

    我很纠结的是用dumpbin WndDll /exports 查dll函数,居然没有函数的导出名~~~
      

  6.   

    我是直接在dll工程里编译执行程序的,应该不存在吧~~~ 而且dll文件是正确导入了的。
      

  7.   

    要不你加我QQ,我吧源文件发给你?不大,是学dll用的个,几十K
      

  8.   

    这…… 如果是dll路径都有问题了,那hMod值肯定为null啊!
      

  9.   

    用DEPEND看看依赖的其他DLL是否都齐全了。
      

  10.   

    你编译的时候加上WndDll.def了没有?这个需要放到ml.exe的参数里面一块编译的.
      

  11.   

    你的def文件写的有问题LIBRARY WndDllEXPORTS
    RunHook @2
    StopHook @3
    改为
    LIBRARY "WndDll"EXPORTS
    RunHook
    StopHook你用序号做什么?序号本来就是为了隐藏导出函数的名字的。一边在用序号,一般说用工具看不到导出函数名字,自相矛盾。
      

  12.   

    你不用def,用__declspec(dllexport),然后用dumpbin,depends,peview之类的找到导出符号名 ,然后就getprocaddress这个名字
      

  13.   

    用序号是在没办法的情况下希望通过MAKEINTRESOURCE进行调用,不过没有成功。
    顺便说一下你这么写没错,我这么写运行也没问题。
    就刚才我终于找到原因了:
    没有加这句extern   "C"   __declspec(dllexport)   BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId);
    dumpbin就搜不到函数导出名。
    现在问题解决了,不过还是不解的是,如果我要用MAKEINTRESOURCE来返回函数名,应该怎么做?
      

  14.   

    MAKEINTRESOURCE就是把参数截断成WORD型