演练:创建和使用托管程序集 (C++)-阿里云开发者社区

开发者社区> rollenholt> 正文

演练:创建和使用托管程序集 (C++)

简介:
+关注继续查看

托管程序集是一种库,您可以创建该库以便高效地重用代码。 这样,就不必在多个程序中重新实现同样的例程,而只需编写这些例程一次,然后在需要该功能的应用程序中引用它们即可。

本演练涵盖以下任务:

  • 创建一个类库项目。

  • 向该类库添加类。

  • 创建引用该类库的应用程序。

  • 在应用程序中使用类库的功能。

  • 运行应用程序。



若要完成本演练,您必须了解 C++ 语言的基础知识。 如果您刚刚开始学习 C++,建议阅读 Herb Schildt 编写的“C++ Beginner's Guide”(《C++ 初学者指南》),MSDN 网站上的 Beginner Developer Learning Center(入门开发人员学习中心)提供了该指南。

创建类库项目
  1. 在“文件”菜单上指向“新建”,然后单击“项目”。

  2. 在“项目类型”窗格中,选择“Visual C++”下的“CLR”。

    此组中的每个项目类型都将创建一个面向公共语言运行时 (CLR) 的项目。

  3. 在“模板”窗格中,选择“类库”。

  4. 在“名称”框中键入项目的名称,例如,MathFuncsAssembly。 在“解决方案名称”字段中键入解决方案的名称,例如,ManagedAssemblies。

  5. 单击“确定”创建项目。

  6. 默认情况下,在创建项目时,会将项目设置为使用预编译头。 若要为 MathFuncsAssembly 项目禁用预编译头,请在“解决方案资源管理器”中选择项目,然后在“项目”菜单上,单击“属性”。 依次展开“配置属性”节点和“C/C++”节点,然后选择“预编译头”。 在“创建/使用预编译头”旁边的列表中,选择“不使用预编译头”。 单击“确定”保存这些更改。 有关更多信息,请参见创建预编译的头文件

向类库添加类
  1. 在您创建 CLR 类库后,向导将为您生成一个基本类。 生成的头文件和源文件的名称均与您在创建项目时为项目指定的名称相同。 在本示例中,它们的名称为“MathFuncsAssembly.h”和“MathFuncsAssembly.cpp”。

  2. 通过使用一个名为 MyMathFuncsAssembly 的基本类,替换 MathFuncsAssembly.h 中的现有代码。 此类执行一些常见的算术运算,例如加、减、乘和除。 代码应与下面的示例类似。

 

// MathFuncsAssembly.h

using namespace System;

namespace MathFuncs
{
    public ref class MyMathFuncs
    {
    public:
        // Returns a + b
        static double Add(double a, double b);

        // Returns a - b
        static double Subtract(double a, double b);

        // Returns a * b
        static double Multiply(double a, double b);

        // Returns a / b
        // Throws DivideByZeroException if b is 0
        static double Divide(double a, double b);
    };
}

在源文件中实现 MyMathFuncs 的功能。 代码应与下面的示例类似。

// MathFuncsAssembly.cpp
// compile with: /clr /LD

#include "MathFuncsAssembly.h"

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 gcnew DivideByZeroException("b cannot be zero!");
        }

        return a / b;
    }
}

  1. 编译该类库,方法是在“生成”菜单中单击“生成解决方案”。 这将创建一个可供其他程序使用的动态链接库 (DLL)。 有关 DLL 的更多信息,请参见 DLL

创建引用类库的控制台应用程序
  1. 在“文件”菜单上指向“新建”,然后单击“项目”。

  2. 在“项目类型”窗格中,选择“Visual C++”下的“CLR”。

  3. 在“模板”窗格中,选择“CLR 控制台应用程序”。

  4. 在“名称”框中键入项目的名称,例如,MyExecRefsAssembly。 在“解决方案”旁边的列表中,选择“添入解决方案”以将新项目添加到包含类库的解决方案中。

  5. 单击“确定”创建项目。

  6. 在“解决方案资源管理器”中选中 MyExecRefsAssembly 项目,然后在“项目”菜单上,单击“属性”,为该项目禁用预编译头。 依次展开“配置属性”节点和“C/C++”节点,然后选择“预编译头”。 在“创建/使用预编译头”旁边的列表中,选择“不使用预编译头”。 单击“确定”保存这些更改。

在控制台应用程序中使用类库的功能
  1. 在您创建 CLR 控制台应用程序后,向导将生成一个仅向控制台写入“Hello World”的程序。 生成的源文件的名称与您在创建项目时为项目指定的名称相同。 在本示例中,名称为“MyExecRefsAssembly.cpp”。

  2. 若要使用在类库中创建的算术例程,必须引用类库。 为此,请在“解决方案资源管理器”中选择 MyExecRefsAssembly 项目,然后在“项目”菜单上,单击“属性”。 在“属性页”对话框中展开“通用属性”节点,选择“框架和引用”,然后单击“添加新引用”。 有关更多信息,请参见“<Projectname> 属性页”对话框 ->“通用属性”->“框架和引用”

  3. “添加引用”对话框列出了所有可以引用的库。 “.NET”选项卡列出了 .NET Framework 附带的库。 “COM”选项卡列出了计算机上的所有 COM 组件。 “项目”选项卡列出了当前解决方案中的所有项目,以及它们包含的所有库。 在“项目”选项卡上,选择“MathFuncsAssembly”,然后单击“确定”。


    通过包括 #using 指令(例如 #using <MathFuncsAssembly.dll>),您可以直接从源文件引用程序集。 有关更多信息,请参见#using Directive (C/C++)

  4. 现在即可在此应用程序中使用 MyMathFuncs 类。 在 MyExecRefsAssembly.cpp 中,使用下面的代码替换文件函数的内容。

// MyExecRefsAssembly.cpp
// compile with: /clr /FUMathFuncsAssembly.dll

using namespace System;

int main(array<System::String ^> ^args)
{
    double a = 7.4;
    int b = 99;

    Console::WriteLine("a + b = {0}",
        MathFuncs::MyMathFuncs::Add(a, b));
    Console::WriteLine("a - b = {0}",
        MathFuncs::MyMathFuncs::Subtract(a, b));
    Console::WriteLine("a * b = {0}",
        MathFuncs::MyMathFuncs::Multiply(a, b));
    Console::WriteLine("a / b = {0}",
        MathFuncs::MyMathFuncs::Divide(a, b));

    return 0;
}

  1. 通过在“生成”菜单上,单击“生成解决方案”来生成可执行文件。

运行应用程序
  1. 通过在“解决方案资源管理器”中选择 MyExecRefsAssembly,然后在“项目”菜单上,单击“设为启动项目”,从而确保选择 MyExecRefsAssembly 作为默认项目。

  2. 若要运行项目,请在“调试”菜单上,单击“开始执行(不调试)”。 输出应与下面的示例类似。

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747474747474748

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
理解“.NET技术”.NET程序集的执行过程
  对于一个已编译好的.NET程序集,Windows操作系统是如何启动执行的呢?日常使用中我们发现对于托管的和非托管的程序集编译器都会吧程序集编译成以.exe或.dll等为扩展名的文件,可见Windows加载器并没有区分是托管还是非托管的程序集,而且我们也知道对非托管的程序集是在编译器直接编译成了机器码,自然可以由CPU直接执行,而托管的.
638 0
codeblocks创建和使用静态库(C语言)
静态库  (扩展名为 .a 或 .lib) 是包含函数的文件,用于在link阶段整合执行程序,动态链接库(扩展名  .dll)是不在link阶段整合进执行程序中的。 DLL文件在执行阶段动态调用 下面我们将用免费的开发工具CodeBocks开发静态库 创建静态库 启动Codeblocks并创建一个类型为 "Static Library" (File/New/Project/Static Library/Go)的项目。
983 0
《C语言编程初学者指南》一1.5 使用程序语句
本节书摘来自华章出版社《C语言编程初学者指南》一书中的第1章,第1.5节,作者【美】Keith Davenport(达文波特) , M1ichael Vine(维恩),更多章节内容可以访问云栖社区“异步社区”公众号查看 1.5 使用程序语句 C程序中的很多代码行都被看做是程序语句,它们负责控制程序的执行并实现功能。
2094 0
+关注
406
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载