(VS2008)C++ DLL文件的生成与使用

最近学习了一下VS下DLL的生成和使用,在这里记录一下

1.DLL文件的生成

    首先创建一个win32的控制台工程,然后如图

(VS2008)C++ DLL文件的生成与使用_第1张图片

创建好工程后我们可以看到在项目的       "属性->配置属性->常规" 里看到配置类型为动态库.dll (这个配置类型你也可以不在上一步的时候设置成DLL,进来之后再改)

(VS2008)C++ DLL文件的生成与使用_第2张图片

一般是使用DLL文件需要.h .dll .lib

.h:函数的声明,变量的声明,自己去编写

.dll:由编译器生成

.lib:由编译器生成,这里动态库生成的lib一般管它叫“导入库”,这样的lib在大多数情况下要比静态库的lib小,里面不包含涉及到的函数的具体代码,里面只包含“这个函数在什么dll里面叫什么名字”这样的信息


接下来创建头文件和cpp文件,内容如下:

头文件内容如下:

__declspec(dllexport) void showHelloWorld();
__declspec(dllexport) int num = 7;

__declspec(dllexport)表示导出符号,加了这个关键字对应的函数和变量才能供调用DLL的人使用

cpp文件内容如下:

#include "helloWorld.h"
#include "stdio.h"

void showHelloWorld()
{
	printf("Hello World!\n");
}

然后我们生成,可以在工程目录下找到对应的lib,dll

我的工程名字是dllTest,所以生成的就是dllTest.lib和dllTest.dll

(VS2008)C++ DLL文件的生成与使用_第3张图片

到这里DLL的生成就完成了。

2.DLL文件的使用

先说一下头文件的问题吧,我们可以直接把上面生成DLL文件时候写的头文件直接拿来用,不过这样不太好,问题出在__declspec(dllexport)这个关键字,这里我们要用到另一个关键字为__declspec(dllimport)导入,使用这个关键字可以提高编译器的效率(感兴趣的可以具体了解一下,楼主还不是很理解里面的原理)

对于使用导入的函数:可以使用__declspec(dllexport)和__declspec(dllimport)或者不使用关键字

但是使用导入的变量:必须使用__declspec(dllimport)

所以我们还是都使用__declspec(dllimport)比较省心


头文件的内容如下:

__declspec(dllimport) void __stdcall showHelloWorld();
__declspec(dllimport) int num;

cpp的内容如下:

#include "useDll.h"
#include "stdio.h"
#pragma comment(lib, "dllTest.lib")

int main()
{
	showHelloWorld();
	printf("num = %d\n", num);
}

运行结果如下:

撒花庆祝✿✿ヽ(°▽°)ノ✿


补充两点

1********************************************************************************************

cpp文件中使用了#pragma comment(lib, "dllTest.lib")

如果不想写这个,可以在项目里配置一下,如下

(VS2008)C++ DLL文件的生成与使用_第4张图片

2********************************************************************************************

一般提供DLL的时候要提供头文件,所以我们可以通过宏定义让一份头文件同时满足提供者和使用者,如下:

#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif

DLLTEST_API void __stdcall showHelloWorld();
DLLTEST_API int num = 7;

你会发现当你的工程输出为DLL的时候VS已经给你定义了DLLTEST_EXPORTS这个宏


好的, 下面没有了,有错误地方希望大家指出。

你可能感兴趣的:(C++)