C++ DLL动态链接库生成与使用

5 篇文章 0 订阅

编程环境: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;
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值