创建和使用动态库(C++)读书笔记

来源:互联网 发布:阿里云服务器好处 编辑:程序博客网 时间:2024/05/22 14:18

  • 创建动态链接库DLL项目
  • 向动态链接库添加类
    • 添加MathFuncsDllh
    • 添加MathFuncsDllcpp源文件
  • 创建应用DLL的应用
  • 在该应用中使用类库中的功能
    • 添加引用
    • 包含头文件
  • 运行应用程序
  • 参考目录

使用库是重复使用代码的一种方式,不用在创建的每个程序中重新实现相同的例程,一次性编写,然后从需要该功能的应用中引用它们。通过将代码置于DLL,可以节省引用它的每个应用中的空间,也可以更新该DLL而无需重新编译所有应用。

  • 创建动态链接库(DLL)项目

  • 向动态链接库添加类

  • 创建应用DLL的应用

  • 在该应用中使用类库中的功能

  • UML序列图和流程图

  • 运行应用程序


创建动态链接库(DLL)项目

这里写图片描述

向动态链接库添加类

添加MathFuncsDll.h

// MathFuncsDll.h#ifdef MATHFUNCSDLL_EXPORTS#define MATHFUNCSDLL_API __declspec(dllexport) #else#define MATHFUNCSDLL_API __declspec(dllimport) #endifnamespace MathFuncs{    // This class is exported from the MathFuncsDll.dll    class MyMathFuncs    {    public:        // Returns a + b        static MATHFUNCSDLL_API double Add(double a, double b);        // Returns a - b        static MATHFUNCSDLL_API double Subtract(double a, double b);        // Returns a * b        static MATHFUNCSDLL_API double Multiply(double a, double b);        // Returns a / b        // Throws const std::invalid_argument& if b is 0        static MATHFUNCSDLL_API double Divide(double a, double b);    };}

在此代码中,当MATHFUNCSDLL_EXPORTS符号已经被定义时,成员函数声明部分的MATHFUNCSDLL_API符号将被设置为_declspec(dllexport)修饰符。词修饰符使函数能作为DLL导出,以供其他应用程序调用。如果未定义MATHFUNCSDLL_EXPORTS(例如,应用程序包含了头文件),则MATHFUNCSDLL_API将定义成员函数声明中的_declspec(dllimport)修饰符。此修饰符将优化在应用程序中导入该函数的操作。默认情况下,DLL的新建项目模板会将PROJECTNAME_EXPORTS添加到DLL项目的已定义符号中。在例子中,生成MathFuncsDll项目后将定义MATHFUNCSDLL_EXPORTS。

添加MathFuncsDll.cpp源文件

// MathFuncsDll.cpp : Defines the exported functions for the DLL application. //#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 invalid_argument("b cannot be zero!");        }        return a / b;    }}

创建应用DLL的应用

创建win32应用程序,并添加源码

// 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;    try {        cout << "a / 0 = " <<            MathFuncs::MyMathFuncs::Divide(a, 0) << endl;    }    catch (const invalid_argument &e) {        cout << "Caught exception: " << e.what() << endl;    }    system("pause");    return 0;}

在该应用中使用类库中的功能

添加引用

这里写图片描述

包含头文件

这里写图片描述

运行应用程序

这里写图片描述

参考目录

演练:创建和使用动态链接库(C++)

-

0 0