Windows VS 创建并使用动态链接库dll(C++)

本文档详细介绍了如何在Visual Studio中创建和使用动态链接库(DLL),内容涵盖新建DLL项目,添加类,创建引用DLL的应用程序,并在控制台应用中调用DLL中的方法。通过实例演示了DLL的编译和使用步骤。
摘要由CSDN通过智能技术生成

欢迎扫码关注微信公众号
回复关键字【资料】获取各种学习资料

在这里插入图片描述

本博客翻译自:
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/ms235636(v=vs.90)

我们第一个要创建的库是一个动态链接库(下一篇是创建静态链接库)。使用动态链接库是一种高效的代码复用方式。相比在每一个你创建的程序中重写具有相同功能的代码而言,你可以只编写一次,然后在需要用到这些功能的应用中引用他们。

本次演示包括以下几个内容:

  • 新建一个动态链接库项目
  • 向动态链接库中添加一个类
  • 新建一个引用该动态链接库的应用程序
  • 在控制台应用中使用我们所创建的类库中的功能(方法)

预备

下面的操作假定你具有C++基础。

新建一个动态链接库(DLL)项目

点击File,选择New
2.
这里写图片描述
3.
这里写图片描述
4.
这里写图片描述
如果在应用程序向导中没有DLL选项,就选择控制台应用程序,因为有些VS版本不支持在应用程序向导中创建DLL项目。你可以稍后更改这个来使你的项目编译生成DLL。

向动态链接库中添加一个类

  1. 为新类创建头文件
    这里写图片描述
    这里写图片描述
    2.创建一个名为MyMathFuncs的简单类来做常用的数学操作,比如加减乘除。代码如下:
// 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);
    };
}

3.注意上面代码中的方法声明中的修饰符__declspec(dllexport)。这些修饰符使得方法被DLL导出从而可以被其他应用使用。了解更多信息,参见dllexport,dllimport
4.创建类的源文件(CPP文件)
这里写图片描述
这里写图片描述
5.在源文件中实现MyMathFuncs类声明的功能,代码如下:

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#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
这里写图片描述
这里写图片描述
注意:如果你是在Command Prompt(命令提示符)下创建的工程,使用/LD编译器选项来指定输出文件为DLL。了解更多信息,参见:/MD, /MT, /LD (Use Run-Time Library)
7.编译动态链接库
这里写图片描述
这样一来,我们便创建出了一个可以被其他程序使用的DLL。了解更多信息,参见DLL

新建一个引用我们刚才创建的动态链接库的应用程序
1.
点击File,选择New
2.
这里写图片描述
**注意:在解决方案处选择下拉列表中的添入解决方案
3.
这里写图片描述
这里写图片描述
在我们上一步新建的控制台应用程序中使用我们编写的类库中的功能

1.在你新建一个控制台应用程序之后,一个空程序便创建出来了。源文件的名字和你在创建项目时选定的名字是一致的。在本例中,源文件的名字是MyExecRefsDll.cpp。

2.要想使用我们在动态链接库中封装的数学功能,必须引用我们创建的那个动态库。
这里写图片描述
这里写图片描述
了解更多关于引用对话框的信息,参见Framework and References, Common Properties, Property Pages Dialog Box.
3.
这里写图片描述
这个对话框会显示所有你能引用的库,了解更多关于添加引用对话框的信息,参见 Add Reference Dialog Box
4.要引用动态链接库的头文件,我们必须更改包含目录路径。
这里写图片描述
5.可执行程序在运行的时候才会加载动态链接库。你必须告知系统到哪寻找MathFuncsDll.dll文件。你可以使用环境变量做这件事。
这里写图片描述
点击确定

注意:如果你想在命令行模式下运行该可执行程序,你必须在命令提示符中运行这条命令:set PATH=%PATH%;<path of MathFuncsDll.dll file>来手动更新PATH环境变量,<path of MathFuncsDll.dll file>表示MathFuncsDll.dll文件的路径

6.现在你可以在新建的应用中使用MyMathFuncs类了。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;

    return 0;
}

7.为该应用程序生成解决方案。

运行我们的应用
1.在解决方案资源管理器中选中MyExecRefsDll项目,右键选择设为启动项目
这里写图片描述
2.运行应用
这里写图片描述
3.运行结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值