C++中DLL的创建与使用

看了很多关于DLL的文章,感觉还是说的不够浅显,这里记录下我的一个了解过程

这里我只用最简单粗暴的方式去使用DLL

文章参考了:参考:https://msdn.microsoft.com/zh-cn/library/ms235636.aspx

开发环境:VS2017

首先创建一个DLL的工程,这里我的工程名为MyDll

文件 -》新建 -》项目-》Visual C++ -》Windows桌面-》动态链接库(DLL)

写入项目名称MyDll 然后就生成了一个工程 包含dllmain.cpp 还有其他的文件(这些都不重要)

类向导 新增加一个类 将你需要实现的功能写在对应的文件中就OK

 

创建了一个类 叫做MathFuncsLib 包含两个文件 MathFuncsLib.h,MathFuncsLib.cpp

代码如下 MathFuncsLib.h

#pragma once

#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif

namespace MathFuncs
{
	class MathFuncsLib
	{
	public:
		// Returns a + b
		static MATHFUNCSDLL_API double Add(double a, double b);

		// Returns a - b
		static MATHFUNCSDLL_API double Subtract(double a, double b);

		// Returns a * b
		static MATHFUNCSDLL_API double Multiply(double a, double b);

		// Returns a / b
		// Throws const std::invalid_argument& if b is 0
		static MATHFUNCSDLL_API double Divide(double a, double b);
	};

}

MathFuncsLib.cpp

#include "stdafx.h"
#include "MathFuncsLib.h"
#include <stdexcept>
using namespace std;

namespace MathFuncs
{
	double MathFuncsLib::Add(double a, double b)
	{
		return a + b;
	}

	double MathFuncsLib::Subtract(double a, double b)
	{
		return a - b;
	}

	double MathFuncsLib::Multiply(double a, double b)
	{
		return a * b;
	}

	double MathFuncsLib::Divide(double a, double b)
	{
		if (b == 0)
		{
			throw invalid_argument("b cannot be zero!");
		}
		return a / b;
	}
}

就包含这两个文件 其他的都不需要你做任何修改,F7编译一下 就会在对应的目录(Debug/Release)下面生成MyDll.dll 和 MyDll.lib 有了这两个文件 然后再加上 你上面的.h文件 就可以拿过来进行一个使用

 

第二步:来测试刚刚生成的DLL文件

建立工程:

文件 -》新建 -》项目-》Visual C++ -》常规-》空工程

这里我们取名叫做TestDll

进行一个设置:

设置路径: 目录下包含dll文件和lib文件
引用目录:$(SolutionDir)$(Configuration)    (放在debug或者release下面)
库目录:$(SolutionDir)$(Configuration)        

链接器-》输入-》附加依赖项 MyDll.lib

包含文件中的 .h文件 然后进行编译

注意:Release下的dll文件生成比debug下的dll文件要小

 

测试代码如下

/*
2018-8-27 17:36:32
测试生成的DLL
*/
#include <iostream>
#include "MathFuncsLib.h"

using namespace std;

int main()
{
	double a = 7.4;
	int b = 99;

	cout << "a + b = " <<
		MathFuncs::MathFuncsLib::Add(a, b) << endl;
	cout << "a - b = " <<
		MathFuncs::MathFuncsLib::Subtract(a, b) << endl;
	cout << "a * b = " <<
		MathFuncs::MathFuncsLib::Multiply(a, b) << endl;
	cout << "a / b = " <<
		MathFuncs::MathFuncsLib::Divide(a, b) << endl;

	try
	{
		cout << "a / 0 = " <<
			MathFuncs::MathFuncsLib::Divide(a, 0) << endl;
	}
	catch (const invalid_argument &e)
	{
		cout << "Caught exception: " << e.what() << endl;
	}

	system("pause");
	return EXIT_SUCCESS;
}

生成结果:

a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
Caught exception: b cannot be zero!
请按任意键继续. . .

 

特别需要注意的点:
 

这里需要注意包含的文件路径:debug就包含在Debug文件夹下;Release就包含在Release的路径下

Debug和Release的版本是不一样的 对应生成的DLL也要选择对应的方式生成;然后包含在需要用到的工程的Debug或者Release路径下

设置:项目 =》 属性 -》引用目录 $(SolutionDir)$(Configuration)

项目 =》 属性 -》库目录 $(SolutionDir)$(Configuration) 

链接器-》输入-》附加依赖项 MyDll.lib

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值