之前看过原创一篇《VS2010 动态库开发——第一章 演练:创建和使用动态链接库 (C++)》的帖子,地址是http://blog.sina.com.cn/s/blog_6fb3686501011ymn.html,感谢原创。这里我们使用VS2015创建和使用自己的动态链接库,配以图文详解。

 

我们先来演示如何使用VS2015创建一个动态链接库。
1.新建一个“Win32控制台应用程序”,“名称”为MathFuncsDll,“解决方案名称”为DynamicLibrary,单击“确定”。

wKiom1kBbzrRz8ziAADNi0R4ePQ931.jpg-wh_50 

2.单击“下一步”,“应用程序类型”选择“DLL”,“附加选项”勾选“空项目”,单击“完成”。

wKiom1kBb0mSqjXiAABkzxCtw3U859.jpg-wh_50 

3.为解决方案“DynamicLibrary”下的项目“MathFuncsDll”添加头文件MathFuncsDll.h,代码如下:
wKioL1kBb1fAGYyCAAAvo7SoG2Q744.jpg-wh_50#pragma once

// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};

PS:修饰符__declspec(dllexport)使 DLL 能够导出该方法以供其他应用程序使用

4.为解决方案“DynamicLibrary”下的项目“MathFuncsDll”添加源文件MathFuncsDll.cpp,代码如下:

wKioL1kBb3rxbLd2AAA1NJ0TWm0081.jpg-wh_50 

// MathFuncsDll.cpp
#include <stdexcept>
#include "MathFuncsDll.h"
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;
}
}

5.右键单击项目MathFuncsDll选择“属性”,在左窗格中选择“配置属性”下的“常规”,在右窗格中,将“配置类型”更改为“动态库(.dll)”。 单击“确定”保存更改。

wKioL1kBb5uytgE8AAE-ZEbkXz4172.jpg-wh_50 

6.按Ctrl+B编译生成该动态链接库,或者单击“生成”菜单中的“生成解决方案”菜单。

wKiom1kBb6ryM4UxAAFz9Mn4Ulk175.jpg-wh_50 

 至此,一个动态链接库就创建好了,我们可以把头文件和生成的动态链接库文件拷贝到指定的目录调用即可。

 

下面我们来演示如何使用VS2015引用动态链接库。
1.右键单击解决方案名称DynamicLibrary,“添加”,“新建项目”,“win32控制台应用程序”,名称为MyExecRefsDll,“确定”。

wKioL1kBb77wGR7pAAC6tQNgCDQ369.jpg-wh_50 

2.单击“下一步”,选择“应用程序类型”下的“控制台应用程序”,不勾选“附加选项”下的“预编译头”,单击“完成”。

wKiom1kBb82AxcsgAAB4YoNUq_Q236.jpg-wh_50PS:通过这种方式可以创建一个空的源程序MyExecRefsDll.cpp。 

3.配置引用动态链接库。右键单击项目MyExecRefsDll下的“引用”,选择“添加引用”,勾选列表中的MathFuncsDll,确定。

wKioL1kBb9qCCEcrAAGmogf-baw317.jpg-wh_50 

4.添加动态链接库的头文件路径。 右键单击项目MyExecRefsDll,单击左侧“配置属性”下的“C/C++”节点下的“常规”选项,在右侧“附加包含目录”的值域中键入MathFuncsDll.h 头文件所在的路径(如E:\workplace\DllDemo\DynamicLibrary\MathFuncsDll)。

wKiom1kBb-eg5Ls5AAEVVh1KOjA640.jpg-wh_50 

5.添加动态链接库文件的路径。 单击左侧“配置属性”下的“调试”选项,在右侧“环境”值域中键入PATH=<MathFuncsDll.dll文件的路径>,例如这里MathFuncsDll.dll的实际路径是PATH=E:\workplace\DllDemo\DynamicLibrary\Release\MathFuncsDll.dll,单击“确定”。

wKioL1kBb_WBnxXKAAD_2U3RQ8s437.jpg-wh_50 

6.复制下面代码到MyExecRefsDll.cpp中覆盖原来的内容:

// MyExecRefsDll.cpp
// compile with: /EHsc /link MathFuncsDll.lib
#include <iostream>
#include "MathFuncsDll.h"
using namespace std;
int main()
{
double a = 7.4;
int b = 99;
cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::MyMathFuncs::Divide(a, b) << endl;
system("pause");
return 0;
}

7.按Ctrl+B或者选择“生成”菜单中的“生成解决方案”可生成可执行文件。

8.右键单击项目MyExecRefsDll选择“设为启动项目”,按Ctrl+F5或选择“调试”菜单中的“开始执行(不调试)”来运行,结果如下:

a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
请按任意键继续. . .


好了,至此你已经学会了如何使用VS2015简单创建和使用动态链接库,玩的开心!