使用VS2015创建和使用动态链接库-图文详解

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

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

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

3.为解决方案“DynamicLibrary”下的项目“MathFuncsDll”添加头文件MathFuncsDll.h,代码如下:
#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,代码如下:

// 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)”。 单击“确定”保存更改。

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

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

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

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

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

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

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

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

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简单创建和使用动态链接库,玩的开心!

时间: 2024-08-24 19:28:22

使用VS2015创建和使用动态链接库-图文详解的相关文章

全网最详细的Eclipse和MyEclipse里对于Java web项目发布到Tomcat上运行成功的对比事宜【博主强烈推荐】【适合普通的还是Maven方式创建的】(图文详解)

不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 全网最详细的Eclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功[博主强烈推荐](图文详解) Eclipse是 或者 MyEclipse是 由 变成 即,只有所框的部分过去了.并且自动改名为dat08. 用MyEclipse里自带的Web Browser检测: 用第三方安装的浏览器检测: 欢迎大家,加入我的微信公众号:大数据躺过的坑   

Unity3D自带地形系统的创建与简单设置图文详解

 先来创建一个新项目,命名为TankWar,以后的相关文件都放置在这个文件夹下面. 创建完毕之后是一个空白的工程,只有一个Camera在场景中. CTRL+S将该场景存档为TankWar0.1,做好版本控制. 我们点击Terrain,选中Create Teerain,便创建了一个地形: 可以看到地形的默认坐标就是0,0,0,我们调整摄像机的位置以便及时观察地形. 选中摄像机后,按下W是调整坐标,按下E是旋转变换,按下R是放缩变换. 调整后场景有点暗,再添加一个灯光:GameObject->C

FineBI学习系列之FineBI的业务包的创建与删除(图文详解)

不多说,直接上干货! 这是来自FineBI官网提供的帮助文档 http://help.finebi.com/ http://help.finebi.com/doc-view-37 目录: 1.描述 2.业务包的创建 3.业务包的删除 即FineBI的业务包 分为  FineIndex业务包    和      FineDirect业务包   . 1.描述 在浏览器地址栏输入:http://localhost:37799/WebReport/ReportServer?op=fs,以管理员身份进入数

FineBI学习系列之FineBI官网提供的SAP数据集(图文详解)

不多说,直接上干货! 这是来自FineBI官网提供的帮助文档 http://help.finebi.com/http://help.finebi.com/doc-view-32.html 目录: 1.描述 2.环境准备 3.SAP数据连接 1.描述 加SAP数据集也是服务器数据集的一种情况, 但是由于SAP数据集常用而且有较多需要注意的配置,因此单独做一节进行说明.那客户SAP系统集成时,如何将SAP中的数据导入BI的服务器数据集呢?FineReport8.0版本中,将SAP数据连接功能做成一个

对于maven创建spark项目的pom.xml配置文件(图文详解)

不多说,直接上干货! http://mvnrepository.com/ 这里,怎么创建,见 这里, 我重点说下spark项目,因为,对于hadoop这样的,我已经写了大量博客了. 比如,我目前用得较多的spark-mllib. 这里spark-mllib_2.10 就是你的scala版本是2.10.X系列.比如我一般是使用scala-2.10.4. 这里spark-mllib_2.11 就是你的scala版本是2.11.X系列. 同时,大家要养成规范,http://mvnrepository.

用maven来创建scala和java项目代码环境(图文详解)(Intellij IDEA(Ultimate版本)、Intellij IDEA(Community版本)和Scala IDEA for Eclipse皆适用)(博主推荐)

为什么要写这篇博客? 首先,对于spark项目,强烈建议搭建,用Intellij IDEA(Ultimate版本),如果你还有另所爱好尝试Scala IDEA for Eclipse,有时间自己去玩玩.但最好追随大流. 对于hadoop项目,强烈建议用eclipse.   其次,出于有博友给我留言的索求需要,为了更高效率和高质量帮助大家,梳理写下这篇博客. 这篇博客 是在Scala IDEA for Eclipse里手动创建scala代码编写环境. 这篇博客 是在Scala IDEA for E

图文详解如何搭建Windows的Android C++开发环境

原地址:http://www.apkbus.com/android-18595-1-1.html //=====================================================================//TITLE://    图文详解如何搭建Windows的Android C++开发环境(一)//AUTHOR://    norains//DATE://    Thursday  14-April-2011//Environment://    Cygw

图文详解远程部署ASP.NET MVC 5项目

原文:图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手,还望大虾勿喷,有什么问题,还望高手指点. 一.本文实验环境: Windows Server 2012 R2 SQL Server 2012 Express Visual Studio 2013 项目为:ASP.NET MVC 5.0,使用的是L

LNMP编译安装之msyql安装--图文详解

LNMP编译安装之msyql安装--图文详解 1.前言 本次安装采用源码安装,主要资源包从官网下载,次要依赖则使用yum进行安装,本篇只涉及mysql的安装,msyql远程登录,不涉及mysql具体配置.该教程纯属安装,不涉及任何重要知识点,老少皆宜. 2.安装步骤 2.1.下载boost(只下载不安装) wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz 2.2.解压bosot t