我看了一个vc6.0编写的例子,使用动态库xxx.lib 。
该工程目录下有xxx.lib和xxx.h,然而在程序中即没有显式调用也没有隐式调用的代码,项目的link中也没有包含该lib,编译却通过了!运行正常。
为什么?难道是该dll特殊?
有经验的请赐教

解决方案 »

  1.   

    源代码中是否使用了#pragma comment(lib, "xxx")
      

  2.   

    2楼,没有。你说的就是隐式调用了。
    没有#pragma   comment(lib,   "xxx")
    也没有loadlibrary("xxx.dll")
      

  3.   

    lib文件保存了该dll的导出函数名。
    调用动态库有两种方法
    1.隐式调用
      包含.lib和.h文件就可以
    2.显式调用
      用LoadLibrary得到dll句柄,然后用GetProcAddress得到需要的函数
      

  4.   

    该动态库被安装到windows\system32下,使某外设的驱动。
      

  5.   

    刚才没有看清楚看你的工程里有没有
    #pragma comment(lib, "xxx")
    或者在File View->External Dependencies里看看
      

  6.   

    在Workspace->FileView->External Dependencies里找.lib文件
      

  7.   

    10楼,external Dependencies里没有
      

  8.   

    看看DLL提供的头文件里是否有 __declspec(import) 之类的
      

  9.   

    如下:
    #ifndef WINSDATA
    #define WINSDATA __declspec(dllimport)
    #endif有什么用吗?
      

  10.   

    这个定义在DLL项目中表示导出符号,在使用此DLL的项目中表示导入符号。DLL提供的头文件应该也会包含#pragma   comment(lib,   "xxx.lib")这样的语句,省去了你的麻烦 
      

  11.   

    在你的VC的Project Settings->link->Gerneral->Object/LibraryModules 找找看!
      

  12.   

    问题是头文件里没有#pragma comment,我在上面已经说过了。
    我现在在工程的一些文件中发现了包含xxx.lib的行,但不知道是怎么加进去的。
    像Pxxx.dsp Pxxx.opt Pxxx.plg Pxxx.vcproj