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

来源:互联网 发布:日语零基础自学 知乎 编辑:程序博客网 时间:2024/05/16 08:59

动态链接库不能直接运行,也不能接收消息。它是一个独立的文件,包含能被可执行程序其他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-bstatic _declspec(dllexport) double Subtract(double a,double b);///Return a*bstatic _declspec(dllexport) double Multiply(double a,double b);///Return a/bstatic _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);

 

}



0 0
原创粉丝点击