编程环境:VS 2013
电脑系统:Windows10 64位
DLL动态链接库生成
- 新建一个工程,win32应用控制台程序,工程名为:ConsoleApplication_GenDLL。应用程序类型:DLL;附加选项:空项目。
- 添加GenDLL.h头文件和GenDLL.cpp源文件。
- 在GenDLL.h头文件中添加如下代码:
#pragma once//代表头文件多次被include时,只编译一次
//“extern "C"代表DLL被导出时,函数名不改变;_declspec(dllexport)是扩展修饰符,代表导出DLL,有了这个之后,就不用*.def文件去定义要导出的函数”
extern “C” _declspec(dllexport) int add(int a, int b);
#pragma once
extern "C" _declspec(dllexport) int add(int a, int b);
- 在GenDLL.cpp源文件中添加下面的代码:
#include"GenDLL.h"
int add(int a, int b)
{
return a + b;
}
- 按F7,编译,会生成DLL和lib库文件
DLL动态链接库的使用
- 创建win32控制台应用程序,工程名:ConsoleApplication_UseDLL。应用程序类型:控制台应用程序;附加选项:空项目
- 添加UseDLL.h和UseDLL.cpp文件
- 在头文件UseDLL.h中添加如下代码:
#pragma once
extern "C" _declspec(dllimport) int add(int a, int b);
- 【调用方式1:隐式调用】在源文件UseDLL.cpp中添加如下代码:
// 隐式调用
#include"UseDLL.h"
#include<Windows.h>
#include<iostream>
using namespace std;
// 包含lib库
#pragma comment(lib,"ConsoleApplication_GenDLL.lib")
int main(void)
{
cout << "3 和 5的和为:" << endl;
int c = 0;
c = add(3, 5);
cout << c << endl;
cout << "Press any key to exit ...";
getchar();
return 0;
}
- 【调用方式2:显式调用】在源文件UseDLL.cpp中添加如下代码:
// 显式调用
#include"UseDLL.h"
#include<Windows.h>
#include<iostream>
using namespace std;
// 定义函数指针
typedef int(*addFunc)(int, int);
int main(void)
{
addFunc _add;
// 声明一个动态链接库DLL的句柄
HINSTANCE hLibrary;
// 载入DLL
hLibrary = LoadLibrary("ConsoleApplication_GenDLL.dll");
if (NULL == hLibrary)
{
FreeLibrary(hLibrary);
return 0;
}
// 选择需要的函数
_add = (addFunc)GetProcAddress(hLibrary, "add");
if (NULL == _add)
{
FreeLibrary(hLibrary);
return 0;
}
cout << "3 和 5的和为:" << endl;
int c = 0;
// 求和函数使用
c = _add(3, 5);
cout << c << endl;
cout << "Press any key to exit ...";
getchar();
// 退出程序前,释放资源
FreeLibrary(hLibrary);
return 0;
}
-
将项目属性-配置属性-常规-字符集改为“使用多字节字符集”,如下图。
-
运行结果:
-
程序下载链接为:
https://download.csdn.net/download/u012210613/11077317