使用动态链接库的好处这里就不提了,使用动态链接库往往需要两个文件一个引入库.lib文件,一个.dll文件。其中引入库文件包含导出函数和变量的名字,.dll文件中保存实际的函数和数据。在编译的时候,只将.lib文件链接.exe文件中去。.dll文件在运行时才被链接,所以叫做动态链接库。
动态链接库有两种加载方式:隐式加载和显示加载。
下边给出一个隐式加载的例子:
新建一个Win32 Dynamic-Link Library Project,含有DLL.h和DLL.cpp两个文件:
//
DLL.h
#ifndef DLL_H
#define
DLL_H
extern
"
C
"
int
__declspec(dllexport)add(
int
x,
int
y);
#endif
//
DLL.cpp
#include
"
DLL.h
"
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
int
add(
int
a,
int
b)
{
return a+b;
}
//
DLLTest.cpp
#include
<
stdio.h
>
extern
"
C
"
_declspec(dllexport)add(
int
a,
int
b);
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
int
main()
{
printf("2+3=%d/n", add(2,3));
return 0;
}
动态链接库有两种加载方式:隐式加载和显示加载。
下边给出一个隐式加载的例子:
新建一个Win32 Dynamic-Link Library Project,含有DLL.h和DLL.cpp两个文件:
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
{
return a+b;
}
编译生成两个文件DLL.lib和DLL.dll。下面测试这个DLL。新建一个工程DLLTest。
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
{
printf("2+3=%d/n", add(2,3));
return 0;
}
然后将DLL.lib和DLL.dll两个文件拷贝到工作目录,并添加到工程文件中。如果从编译器中运行程序就要在工作目录下包含DLL.dll,如果从dubug文件夹下运行exe文件就必须在exe文件同目录下含有DLL.dll。DLL.lib文件一定放在工作目录下,因为是要和其他文件链接的。如果链接报错,尝试在Project-Setting-Link添加DLL.lib一项。编译通过后运行程序就可以看到我们正确使用了库中的加法。
下面介绍显示的加载动态链接库的例子:
未完待续。。。