创建动态库:
新建一个DLL的VS工程,选择“空项目”,此时会进入到新建的项目工程中;
在项目工程中添加.h、.c、.cpp文件,并且填写代码;
编译运行,在Debug下生成.dll和.lib文件,此时创建成功。
【注解】在创建动态库过程中,用到很多语法,比如:C与C++的混合
编程#ifdef __cplusplus extern "C"{#endif //函数的声明 #ifdef __cplusplus }#endif 、
导出DLL函数关键字__declspec (dllexport) + 函数的声明与实现、
#ifdef...#else...#endif(#ifdef __cplusplus...#else...#endif) 、
防止重定义头文件#ifndef...#define...#endif 、 #define
=====================================================================
使用动态库:
新建一个使用动态库的项目,把上面生成的.dll和.lib文件以及.h文件拷贝到当前工程目录下;
在项目中新建main.c或者main.cpp,并加上调用的代码,编译运行,此时动态库被使用。
【注解】在使用动态库过程中,用到很多语法,比如:链接器的附加依赖项#pragma comment(lib,"DLL.lib")
【下面有两个创建和使用动态库的示例】
例1:
【功能介绍】
创建动态库:
①在头文件中声明两个函数
②一个在.c文件中实现,另一个在.cpp文件中实现
使用动态库:
在main.c和main.cpp使用上面生成的动态库中的两个函数
(1)创建动态库
//DLL.h头文件声明2个函数
#ifndef DLL_H
#define DLL_H
#ifdef BUILD_DLL
#define PORT_DLL __declspec(dllexport)
#else
#define PORT_DLL __declspec(dllimport)
#endif
#ifdef __cplusplus
#include <iostream>
using namespace std;
extern "C"
{
#endif
PORT_DLL int add(int a, int b);
PORT_DLL void show();
#ifdef __cplusplus
};
#endif
#endif // DLL1_H
------------------------------
//define_add.cpp
#define BUILD_DLL
#include "DLL.h"
PORT_DLL int add(int a,int b)
{
#ifdef __cplusplus
printf("DLL生成使用成功:add()函数 —— C++编译环境\n");
return a+b;
#else
printf("DLL生成使用成功:add()函数 —— C编译环境\n");
return a+b;
#endif
}
------------------------------
//define_show.c
#define BUILD_DLL
#include "DLL.h"
PORT_DLL void show()
{
#ifdef __cplusplus
printf("\nDLL生成使用成功:show()函数 —— C++编译环境\n");
#else
printf("\nDLL生成使用成功:show()函数 —— C编译环境\n");
#endif
}
//编译运行,会生成DLL.dll和DLL.lib文件,再加上DLL.h文件用于下面的DLL的使用
(2)使用动态库
DLL.dll和DLL.lib文件,再加上DLL.h文件拷贝到新建的工程目录下,在配置好链接器中的“附加依赖项”,最后在main.cpp中写上下面的代码:
//main.c或者main.cpp调用DLL.dll中的2个函数
#include "DLL.h"
#pragma comment(lib,"DLL.lib")
int main()
{
cout<<"add(1,2) = "<<add(1,2)<<endl;
show();
getchar();
}
编译运行,结果如下图所示:
——————————————————————————————————————
例2:
【创建DLL】
//head.h
#ifndef _HEAD_H_
#define _HEAD_H_
#ifdef __cplusplus
#include <iostream>
using namespace std;
extern "C"
{
#endif
__declspec(dllexport) void show1();
__declspec(dllexport) void show2();
#ifdef __cplusplus
};
#endif
#endif
----------------------------------------------------------------
//define1.cpp
#include "head.h"
__declspec(dllexport) void show1()
{
#ifdef __cplusplus
cout<<"show1:这是一个c++程序"<<endl;
#else
printf("show1:这是一个C程序\n");
#endif
}
----------------------------------------------------------------
//define2.c
#include "head.h"
__declspec(dllexport) void show2()
{
#ifdef __cplusplus
cout<<"show1:这是一个c++程序"<<endl;
#else
printf("show2:这是一个C程序\n");
#endif
}
【使用DLL】
//.dll,.lib,.h三个文件拷贝到新建的工程中,再在main.c或者main.cpp添加下面代码
#include "head.h"
#pragma comment(lib,"DLL.lib")
int main()
{
show1();
show2();
getchar();
}
编译运行,结果如下图所示: