VC++ 静态库&动态库的创建与调用

来源:互联网 发布:淘宝客推广券 编辑:程序博客网 时间:2024/05/21 19:35

1.静态库的创建与调用

  创建Win32 Static Library工程

  在工程中添加静态库的头文件(StaticLib.h)与实现文件(StaticLib.cpp)

  如下图:

 

 

  编译链接后,此时我们的静态库文件已经生成了

  打开当前工程下Debug文件夹,会发现StaticLib.lib(静态库文件)

 

  如其他人需要你的静态库时,你只需要将.h文件与.lib文件提供即可

  接下来我们调用静态库

  创建空的 Win32 Console Application 工程

  //调用静态库的方法有多种,此处介绍一种常用&简单的方法

  工程创建好后,首先将上述的.h与.lib文件拷贝到当前工程下(此时工程为调用静态库的工程)

 

  //添加CallStaticLib.cpp调用静态库

 

  结果如下:

 

2.动态库的创建与调用

  使用动态库的时候,需要提供两个文件:引入库文件(.lib)和DLL(.dll)文件

  创建空的 Win32 Dynamic~Link Liarary工程

  添加DynamicLib.cpp 用来创建动态库//注意动态库一定要导出_declspec(dllexport)

 

 

  编译链接在当前工程下查看Debug文件夹发现

 

  为什么只有DLL文件而没有引入库文件??

  那是因为我们没有导出那俩个函数,接下来介绍如何查看函数是否导出

  查看导出:

   没加_declspec(dllexport)

   1.利用VC6自带工具Depends

    

   2.用命令行输出

     2.1 首先进入安装VC路径下的VC98的Bin目录(由于编者VC安装在C盘)

    

     2.2 运行dumpbin命令

    

     2.3 执行以下命令查看动态库

     

    上述方法在动态库文件中没有发现我们的Mul与Dev函数.

    现在修改一下DynamicLib.cpp内容,再次编译链接

   

    同样用上述方法执行一遍发现:

     加上_declspec(dllexport)后

     1.VC自带工具Depends

    

    2. 命令行(cmd)

    

   这是说明我们的函数被导出了.

   我们进入到当前工程的Debug目录下发现DLL文件与LIB文件

  

   此时我们的动态库文件建立完成了,用户需要调用Mul与Dev时,我们提供DynamicLib.dll & DynamicLib.lib即可

   接下来调用动态库(调用动态库的方法也有多种,此处介绍一种较常见 & 简单的方法)

   创建空的Win32 Console Applicatuon工程

   1. 将DynamicLib.dll & DynamicLib.lib拷贝到当前工程下

   2. Project -> Settings 选择调用动态库的工程  -> Link -> 添加DynamicLib.lib

   

    添加CallDynamicLib.cpp

   

   运行结果如下:

   

   到此为止静态库与动态库都使用了,但是动态库中还需要补充一点问题

   _declspec(dllexport)与_declspec(dllimport)

   如果上面仔细的朋友会发现 我用extern导入的Mul与Dev,其实用_declspec(dllimport)更好一点

   主要区别在如果导出的是类的静态成员,尽量使用_declspec(dllimport)

   那么我们就用这种方法实现一下吧

   第一步:建立动态库工程,导出时就需要定义头文件Dll.h

     

   第二步:实现Dll.cpp

   

   第三步:拷贝Dll.h Dll.cpp Dll.lib(同样在Link中添加进去)

   第四步:新建工程调用动态库

   

   运行结果:

   

   静态库:

    编译链接可执行文件时,链接器从库中复制这些函数和数据到可执行文件中,发布产品时

    只需要发布这个可执行文件,并不需要发布使用了的静态库

  动态库:

    编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并

    不复制到可执行文件中,直到可执行文件运行时才去加载所需的DLL,将该DLL映射到进程的地址空间中,

    然后访问DLL中导出的函数,在发布产品时,除了可执行程序以外,同时还要发布该程序将要调用的动态链接库。



0 0
原创粉丝点击