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

我们将创建的第一种类型的库是动态链接库 (DLL)。 使用 DLL 是一种重用代码的绝佳方式。 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。

本演练涵盖以下内容:

  • 创建新的动态链接库 (DLL) 项目。
  • 向动态链接库添加类。
  • 创建引用动态链接库的应用程序。
  • 在控制台应用程序中使用类库的功能。
  • 运行应用程序。

系统必备

本主题假定您具备 C++ 语言的基础知识。 如果您是刚开始学习 C++,建议您参阅 Herb Schildt 编写的“C++ Beginner's Guide”(《C++ 初学者指南》),该书可从http://go.microsoft.com/fwlink/?LinkId=115303 在线获得。

创建新的动态链接库 (DLL) 项目
  1. 从“文件”菜单中,选择“新建”,然后选择“项目…”。
  2. 在“项目类型”窗格中,选择“Visual C++”下的“Win32”。
  3. 在“模板”窗格中,选择“Win32 控制台应用程序”。
  4. 为项目选择一个名称,如 MathFuncsDll,并将其键入“名称”字段。 为解决方案选择一个名称,如 DynamicLibrary,并将其键入“解决方案名称”字段。
  5. 单击“确定”启动 Win32 应用程序向导。 在“Win32 应用程序向导”对话框的“概述”页中,单击“下一步”。
  6. 在“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果可用),或者选择“控制台应用程序”(如果“DLL”不可用)。 某些版本的 Visual Studio 不支持通过使用向导创建 DLL 项目。 您可以稍后对此进行更改,以将项目编译为 DLL。
  7. 在“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。
  8. 单击“完成”创建项目。
向动态链接库添加类
  1. 若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。 将显示“添加新项”对话框。 在“类别”窗格中,选择“Visual C++”下的“代码”。 在“模板”窗格中选择“头文件(.h)”。 为头文件选择一个名称,如 MathFuncsDll.h,并单击“添加”。 将显示一个空白文件。
  2. 添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。 代码应与以下内容类似:

 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// 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);

    };

}

 

  1. 请注意此代码方法声明中的 __declspec(dllexport) 修饰符。 这些修饰符使 DLL 能够导出该方法以供其他应用程序使用。 有关更多信息,请参见 dllexport, dllimport
  2. 若要为新类创建源文件,请从“项目”菜单中选择“添加新项…”。 将显示“添加新项”对话框。 在“类别”窗格中,选择“Visual C++”下的“代码”。 在“模板”窗格中,选择“C++ 文件(.cpp)”。 为源文件选择一个名称,如 MathFuncsDll.cpp,并单击“添加”。 将显示一个空白文件。
  3. 在源文件中实现“MyMathFuncs”的功能。 代码应与以下内容类似:

 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

// 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;

    }

}

 

  1. 若要将项目生成为 DLL,请从“项目”菜单中选择 MathFuncsDll“属性...”。 在左窗格中,选择“配置属性”下的“常规”。 在右窗格中,将“配置类型”更改为“动态库(.dll)”。 单击“确定”保存更改。

    注意

    如果您从命令行生成项目,请使用 /LD 编译器选项指定输出文件应为 DLL。 有关更多信息,请参见 /MD、/MT、/LD(使用运行库)

  2. 编译该动态链接库,方法是选择“生成”菜单中的“生成解决方案”。 这样就创建了一个可供其他程序使用的 DLL。 有关 DLL 的详细信息,请参见 DLL
创建引用动态链接库的应用程序
  1. 若要创建将引用并使用刚创建的动态链接库的应用程序,请从“文件”菜单中选择“新建”,然后选择“项目...”。
  2. 在“项目类型”窗格中,选择“Visual C++”下的“Win32”。
  3. 在“模板”窗格中,选择“Win32 控制台应用程序”。
  4. 为项目选择一个名称(如 MyExecRefsDll),并将其键入“名称”字段。 从“解决方案”旁边的下拉列表中选择“添入解决方案”。 这会将新项目添加到该动态链接库所属的同一个解决方案中。
  5. 单击“确定”启动“Win32 应用程序向导”。 在“Win32 应用程序向导”对话框的“概述”页中,单击“下一步”。
  6. 在“Win32 应用程序向导”的“应用程序设置”页中,选择“应用程序类型”下的“控制台应用程序”。
  7. 在“Win32 应用程序向导”的“应用程序设置”页中,清除“附加选项”下的“预编译头”复选框。
  8. 按“完成”创建项目。
在控制台应用程序中使用类库的功能
  1. 创建新的控制台应用程序后,将为您创建一个空程序。 源文件的名称与您在前面为项目选择的名称相同。 在本示例中,名为“MyExecRefsDll.cpp”。
  2. 若要使用在动态链接库中创建的算术例程,则必须引用该库。 若要执行此操作,请在解决方案资源管理器中选择 MyExecRefsDll 项目,然后从“项目”菜单中选择“引用...”。 在“属性页”对话框中,展开“通用属性”节点,选择“框架和引用”,然后选择“添加新引用...”按钮。 有关“引用...”对话框的更多信息,请参见“<Projectname> 属性页”对话框 ->“通用属性”->“框架和引用”
  3. 显示“添加引用”对话框。 此对话框列出了所有可以引用的库。 “项目”选项卡列出了当前解决方案中的所有项目,以及它们包含的所有库。 在“项目”选项卡中,选择 MathFuncsDll。 然后单击“确定”。
  4. 若要引用动态链接库的头文件,必须修改包含目录路径。 为此,请在“属性页”对话框中展开“配置属性”节点,然后展开“C/C++”节点,并选择“常规”。 在“附加包含目录”旁边,键入 MathFuncsDll.h 头文件所在位置的路径。
  5. 可执行文件仅在运行时加载动态链接库。 必须告诉系统在哪里查找“MathFuncsDll.dll”。 您可以通过使用 PATH 环境变量做到这一点。 为此,请在“属性页”对话框中展开“配置属性”节点,并选择“调试”。 在“环境”旁边键入以下内容:PATH=<MathFuncsDll.dll 文件的路径>,其中 <MathFuncsDll.dll 文件的路径> 应替换为 MathFuncsDll.dll 的实际位置。 单击“确定”保存所有更改。

    注意

    如果要从命令行而不是从 Visual Studio 运行可执行文件,则必须在命令提示符处手动更新 PATH 环境变量,如下所示:set PATH=%PATH%;<MathFuncsDll.dll 文件的路径>,其中 <MathFuncsDll.dll 文件的路径> 应替换为 MathFuncsDll.dll 的实际位置。

  6. 现在,可以在应用程序中使用“MyMathFuncs”类了。 使用以下代码替换“MyExecRefsDll.cpp”的内容:

 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

// 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;

}

 

  1. 通过从“生成”菜单中选择“生成解决方案”,生成可执行文件。
运行应用程序
  1. 确保选择“MyExecRefsDll”作为默认项目。 在“解决方案资源管理器”中,选择 MyExecRefsDll,然后选择“项目”菜单中的“设为启动项目”。
  2. 若要运行项目,请选择“调试”菜单中的“开始执行(不调试)”。 输出应该与下面的内容类似:
  3. a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747475

 

from:http://www.cnblogs.com/rollenholt/archive/2012/04/14/2447017.html

时间: 2024-09-21 05:09:14

演练:创建和使用动态链接库 (C++)的相关文章

创建“通用的”动态链接库(DLL)

最近有许多人问如何让动态链接库的输出函数能够被任何支持动态链接库的语言调用.写动态链接库是很EASY的事情.但是,他们大多觉得输出的名字有乱字符(如:_vbShiftRight@1).我想在这里就讨论一下如何让输出函数的名字中不出现乱子符. 首先,除非你绝对需要使用C++编码,否则我还是推荐使用C来写DLL.这里我想让创建的DLL可以在VB中使用. 你需要实现自己DLL的入口点函数和保证代码使用stdcall调用规范,但这要依赖你使用的编译器.例如,你可以在VC中使用"/entry:"

VC++ 6.0如何创建与调用动态链接库

1.静态链接库与动态链接库区别: 静态链接库:lib中的指令被直接包含在最终生成的EXE文件中. 动态链接库:dll不必被包含在最终的EXE中,EXE文件执行时可以动态地引用和卸载DLL文件. 同时,静态链接库中不能再包含其他的动态链接库或静态库,而动态链接库中可以包含其他的动态或静态库. 2.VC++支持的DLL: DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库.MFC规则DLL和MFC扩展DLL.DLL导出函数(或变量.类)可供应用程序调

VC6.0如何创建以及调用动态链接库实例详解_C 语言

小弟在公司的职责,在上篇博客中已经简约介绍.这边博客主要介绍技术的应用而不在细究原理.因为公司项目着急,出结果要紧,并且咱也不是专注搞研究的,所以,基本懂了原理后,直接上手工作,搞出demo来最好. 至于公司工作情况,今天暂且略过,当然也不是一两句能够表达清楚的.后面会有相应的工作总结,敬请期待-- 现在,废话少说,直奔主题--VC6.0中创建动态链接库. 作为客户与后台的中介,为了更好的调节两方的关系,我明智滴选择了webservice以及动态链接库.在与客户c++使动态链接库方式,而与后台j

C/C++中动态链接库的创建和调用

动态连接库的创建步骤: 一.创建Non-MFC DLL动态链接库 1.打开File -> New -> Project选项,选择Win32 Dynamic-Link Library ->sample project ->工程名:DllDemo 2.新建一个.h文件DllDemo.h #ifdef DllDemo_EXPORTS #define DllAPI __declspec(dllexport) #else #define DllAPI __declspec(dllimport

LINUX系统中动态链接库的创建与使用

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

LINUX系统中动态链接库的创建与使用{补充}

 大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,

浅析C/C++中动态链接库的创建和调用_C 语言

DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的创建步骤: 创建Dll有两种方式. 一.创建Non-MFC DLL动态链接库 1.打开File -> New -> Project选项,选择Win32 Dynamic-Link Library ->sample project ->工程名:DllDemo 2.新建一个.h文件DllDe

转:LINUX系统中动态链接库的创建与使用

LINUX系统中动态链接库的创建与使用 雨亦奇 01-8-6 下午 03:09:11 大家都知道,在 WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个 执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LI

创建可重用代码(C++)

现在我们学习了如何使用 Visual Studio IDE 以及如何创建命令行应用程序和 Windows 应用程序,下面我们将学习如何编写代码,以便可以让多个应用程序使用该代码. 执行此操作的一种方法是创建包含相关类和算法的库. 例如,Visual C++ 附带了许多任何 C 或 C++ 应用程序都可以使用的库,如 C 运行库和标准 C++ 库. 如果没有这些库,则 C 或 C++ 应用程序没有写入控制台或确定当前日期和时间的标准方法. 每个 C 或 C++ 应用程序都可能用到前面提到的库之一.