动态链接库编程范例

我们经常在做各种二次开发的时候都会使用卖方提供的SDK进行开发,往往卖方并不愿理提供给我源程序而是给我一个提供

一系列函数接口说明和一些封装的动态链接库。

 

今天我们就要说说静态链接库和动态链接库,静态链接库往往以lib后缀结尾,然而动态链接库往往以dll后缀结束。是我

们不能仅仅以后缀名作为它们二者的区别,比如动态链接库也可能存在lib后缀的文件,然而这种情况下lib文件是保存一

些函数符号,正则的提供运行代码的指令部分仍然存在在dll文件中。

 

其实从本质上来说,动态链接库是我们再运行程序的时候在进行链接,然而静态链接库的代码指令是直接包含在最终的应用

序中,所以我们有使用的动态链接库在生成最终的程序里,如果一旦将该动态链接库文件删除,程序将提示确实xxx.dll文件。

然而使用静态链接库生成的最终程序里,我们直接删除静态链接库文件,程序仍然将正常执行。因为在生成程序的过程中,静

态链接库中的代码指令已经完全的嵌入到了应用程序中了。windows提供的大多数服务都是以dll形式提供的。然而静态链接库

然可移植性强,但是会造成程序很庞大,所以往往大多数开发接口都是以动态链接库的形式提供的。

 

下面将展示一个简单的动态链接库的范例:
1.打开vc++6.0新建一个动态链接库工程,取名为Dlldemo:

 

 

2.创建一个空的DLL工程:

 

 

3.我们添加一个头文件为AddDll.h 一个源文件为AddDll.cpp在本范例中我们将要把下面这个函数封装为动态链接

库提供给第三方开发:

int Add(int a,int b)
{
    return a+b;
}

 

4.我们在头文件里添加需要导出的函数的声明:

1 extern "C" _declspec(dllexport) int Add(int a,int b);

 

 

5.然后在源文件里面实现这个导出函数:

1 #include "AddDll.h"
2 
3 int Add(int a,int b)
4 {
5     return a+b;
6 }

 

6.编译工程,此时便在工程目录下生成了我们需要的dll文件,如下图所示:

 

其中AddDll.h提供动态链接库导出函数的声明,Dlldemo.dll文件提供了实际导出函数的实现代码,不过不再是源代码的

形式。Dlldemo.lib提供了导出函数的一些符号列表。

 

至此动态链接库便成功生成了。

 

 

下面我们用一个例子测试:

1.新建一个测试工程为test,在工程中添加一个test.cpp用于测试

 

2.将上面的三个文件拷贝到test工程目录

 

3.将Dlldemo.lib用以下两种方式中的一种链接到程序:

    一.通过工程-设置-链接-对象/库模块中 添加Dlldemo.lib

    二.或者在程序通过#pragma comment(lib,"Dlldemo.lib")

 

4.在test.cpp包含头文件AddDll.h,同时用以下测试代码:

 1 #include "AddDll.h"
 2 #include <iostream>
 3 using namespace std;
 4 #pragma comment(lib,"Dlldemo.lib")
 5 int main()
 6 {
 7     int num1,num2;
 8     cout<<"Please input the two number:"<<endl;
 9     cin>>num1;
10     cin>>num2;
11     int AddResult;
12     AddResult=Add(num1,num2);
13     cout<<"The Add Result is: "<<AddResult<<endl;
14     return 0;
15 }

运行结果:

 

测试成功咯!!!

posted @ 2015-07-30 20:42  vpoet  阅读(3582)  评论(0编辑  收藏  举报