VS2010创建并使用动态链接库(.dll)

动态链接库不能直接运行,也不能接收消息。它是一个独立的文件,包含能被可执行程序其他DLL来调用其函数完成某项工作。

只有在其他模块调用动态链接库中的函数时,动态链接库才发挥作用。在实际编程中,可以把完成某种功能的函数放在一个动态链接库中,

提供给其他程序调用。使用 DLL 是一种重用代码的绝佳方式。 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,

然后从需要该功能的应用程序引用它们即可。

 
静态库(.LIB):
静态链接库中的所有指令全部被包含在最终生成的可执行文件(.EXE)中。发布可执行文件时,不需要发布静态链接库。
动态库(.lib和.dll):

动态链接库一般包含两个文件:引入库文件(.lib)和DLL文件(.dll)。引入库文件包含DLL文件导出的函数和变量的符号名,即API接口;

DLL文件包含实际的函数和数据。在使用动态库进行编译连接时只需要链接引入库文件当可执行程序运行时,需要动态库中的某个函数时,

才去加载所需的DLL,将DLL映射到进程的地址空间中,然后访问DLL中的导出的函数。发布产品时,除了发布可执行文件,还要同时发布该程序中将要调用的动态链接库。

MSDN例子: https://msdn.microsoft.com/zh-cn/library/ms235636(v=vs.80).aspx


制作Dll文件:

1.文件--项目--Win32 控制台程序

2.名称:MathFuncsDll

  解决方案名称:DynamicLibrary

3.应用程序类型--DLL、空项目

4.新建.h文件----添加MyMathFuns类,程序如下:

namespace MathFuncs
{
	class MyMathFuncs
	{
	public:
		///Return a+b
		<span style="color:#ff0000;">static _declspec(dllexport)</span> double Add(double a,double b);
		///Return a-b
		static _declspec(dllexport) double Subtract(double a,double b);
		///Return a*b
		static _declspec(dllexport) double Multiply(double a,double b);
		///Return a/b
		static _declspec(dllexport) double Divide(double a,double b);

		///注:_declspec(dllexport)修饰符:使DLL能够导出该方法以供其他应用程序使用
	};
}
注:
__declspec(dllexport) 修饰符:使 DLL 能够导出该方法以供其他应用程序使用。 

5.新建.cpp文件:

#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
	double MyMathFuncs::Add(double a,double b)
	{
		return a+b;
	}
	double MyMathFuncs::Subtract(double a,double b)
	{
		return a-b;
	}
	double MyMathFuncs::Multiply(double a,double b)
	{
		return a*b;
	}
	double MyMathFuncs::Divide(double a,double b)
	{
		if(b==0)
		{
			throw new invalid_argument("b cannot be zero!");
		}

		return a/b;
	}
}

6.项目--属性--配置属性--常规--配置类型--.dll

7.生成解决方案。此时,在项目文件夹下新增了Debug文件夹,文件夹中包含新生成的.dll/.lib等文件。


在程序中调用DLL文件:

此方法即添加OpenCV动态链接库的方法。

步骤:

1.将.h/.lib/.dll复制到工程文件夹中

例:

Project->xxxSystem(解决方案)->xxxSystem(项目)->.h

Project->xxxSystem(解决方案)->Debug->.lib/.dll

 

2.项目→属性→VC++目录→库目录→添加.lib文件的绝对地址

或:在解决方案--右键--添加--.lib/.dll

 

3.添加头文件

例:在xxxxxx.cpp中用到,则

#include "MyMathFuncs.h"

……

void Cxxxxxx::OnBnClickedButton1()

{

         CString str;

         doublea = 7.4,c;

         int b =99;

         c=MathFuncs::MyMathFuncs::Add(a,b);

         str.Format("a+b=%lf",c);

         MessageBox(str);

 

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值