我在静态连接一个dll时,它显示:“unresolved external symbol __imp__CallHook”
有谁知道这是什么原因啊?dll是MASM写的一个小钩子,在MASM中可以正常使用。我在Vc中静态连接的方法是:
1、添加hook.h文件且内容如下:
   extern "C" __declspec(dllimport)  void CallHook(BOOL EnableHook);
2、然后在调用dll函数的那个cpp文件头添加#include “hook.h”还有,有谁知道“#pragma comment(lib, "ttt.lib")”这样类似的语句是干嘛的?静态链接到底需要做那些工作啊?
谢谢了。

解决方案 »

  1. 谁知道这是什么原因啊?
    -------
    没有DLL相应的LIB文件,“#pragma comment(lib, "ttt.lib")”就是添加相应DLL的LIB文件http://blog.csdn.net/laiyiling/archive/2004/12/10/211713.aspx
      

  2. 那么静态连接是不是只要添加一个导入的函数声明和lib、dll文件在相应路径就可以在代码中直接调用函数了呢?
      

  3. dll是动态链接用的,静态连接要用lib。
      

  4. “#pragma comment就是直接把lib加到工程中
      

  5. 静态连接需要把头文件,lib加入工程,dll也要放到对应路径
      

  6. 问题解决了,原因是Vc调用函数默认是:__cdecl, __stdcall不是默认。应该手动书写成__stdcall.
    即:extern "C" __declspec(dllimport)  void _stdcall CallHook(BOOL EnableHook);
      

类似问题 »