C++超集C++/CLI模块的基本用法

 更新时间:2022年07月04日 10:48:17   作者:天方  
这篇文章介绍了C++超集C++/CLI模块的基本用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统。C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和构建有性能要求的算法。

这两种场景看起来有较大的差异,大多数的时候可以各行其道。但还是有很多时候会出现融合的情况。当我们构建分布式系统的时候,由于RPC机制一般都是语言无关的,我们大可以将其各尽所长,按需划分在最能发挥其长处的位置。然而,一旦我们需要构建融合两者需求的集中式系统的时候,就会头痛无比。

此时,我们可以使用C++/CLI搭建C++和.Net之间的桥梁,C++/CLI是一个比较有意思的两栖模块,它具有如下特点

  • 既可以访问.Net类库,也可以访问C++原生类库

  • 既可以被.Net程序引用,也可以被C++原生程序引用

使用C++/CLI,我们可以使用C++编写算法,用C#编写界面,也可以使用.Net Framework类库增强C++程序功能,各取所长。

下面我们就以一个简单的例子来演示一下它的用法:

Calculator.h:

#pragma once

namespace CppCliTest
{
    public ref class Calculator
    {
        public:
        int Add(int a, int b);
    };
}

Calculator.cpp

#include "stdafx.h"
#include "Calculator.h"

namespace CppCliTest
{
    int Calculator::Add(int a, int b)
    {
        return a + b;
    }
}

main.cpp

#include "stdafx.h"
#include "Calculator.h"

using namespace System;
using namespace CppCliTest;

int main(array<System::String ^> ^args)
{
    Calculator^ calculator = gcnew Calculator();
    int result = calculator->Add(3, 2);

    Console::WriteLine(L"Result is {0}", result);
    return 0;
}

从这个例子中,我们可以简单的管中窥豹的看看C++/CLI是在C++的基础上扩充了一套语法,使其具有访问.Net原始的功能,这里用到的有:

  • 使用ref class声明CLI引用类型(C#中的class)

  • 使用^(例如如这里的String ^)来定义CLI引用类型

  • 使用gcnew创建CLI的引用类型

具体的功能我将在后面的文章中再做介绍,MSDN中也有文档详细的介绍了这些语法:https://msdn.microsoft.com/zh-cn/library/ms235289.aspx

虽然C++/CLI同时具有两者的功能,但它使得本就比较复杂的C++语法变得更加复杂了(特别是初期的版本,非常复杂,现在已经简化了不少了),并且长期没有得到VisualStudio这宇宙第一IDE的较好支持(在VS2010的时候还不支持智能提示),是无法与拥有大量语法糖的C#比开发效率的。加上大多数需求场景可以通过分布式系统解决,这些都导致了它一直没有得到太多的关注。但是,微软还是在积极的改进它的,加上C++11的支持,现在已经比之前好用多了,如果用在合适的位置,是绝对能让你的开发如鱼得水的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言采用文本方式和二进制方式打开文件的区别分析

    C语言采用文本方式和二进制方式打开文件的区别分析

    这篇文章主要介绍了C语言采用文本方式和二进制方式打开文件的区别分析,有助于读者更好的理解文本文件与二进制文件的原理,需要的朋友可以参考下
    2014-07-07
  • 在C++程序中开启和禁用Windows设备的无线网卡的方法

    在C++程序中开启和禁用Windows设备的无线网卡的方法

    这篇文章主要介绍了在C++程序中开启和禁用Windows设备的无线网卡的方法,包括一些常见错误的分析与解决,需要的朋友可以参考下
    2016-03-03
  • C++实现简易的通讯录管理系统

    C++实现简易的通讯录管理系统

    这篇文章主要为大家详细介绍了C++实现简易的通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C/C++经典杨辉三角问题解决方案

    C/C++经典杨辉三角问题解决方案

    杨辉三角形,又称帕斯卡三角形、贾宪三角形、海亚姆三角形,它的排列形如三角形。本文将为大家介绍通过C++/C语言实现打印杨辉三角形的示例代码,需要的可以参考一下
    2023-02-02
  • C++ 在堆上开辟与释放二维、三维指针详细解析

    C++ 在堆上开辟与释放二维、三维指针详细解析

    一维指针其实就相当于一维数组,不用去看书上所说的数组在内存中的首地址这些晦涩的话,以此类推 二维指针就相当于二维数组,新手对一维数组的开辟与释放比较容易熟悉
    2013-09-09
  • C语言18个必背经典程序

    C语言18个必背经典程序

    这篇文章主要分下工的是18个C语言必背的经典程序,下面文章我们就来看看实例,需要的小伙伴可以参考一下哟,希望对你有所帮助
    2021-10-10
  • C++优先级队列的使用指南与模拟实现

    C++优先级队列的使用指南与模拟实现

    优先级队列是一种特殊的队列,其中每个元素都有一个与之关联的优先级,优先级较高的元素会在队列中较早地被处理,而优先级较低的元素会在后续处理,本文给大家介绍C++优先级队列的使用指南与模拟实现,需要的朋友可以参考下
    2023-09-09
  • Qt读写ini文件之QSettings用法

    Qt读写ini文件之QSettings用法

    这篇文章主要为大家介绍了Qt读写ini文件之QSettings的使用方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • C++ OpenCV学习之图像像素值统计

    C++ OpenCV学习之图像像素值统计

    在图像分析的时候,我们经常需要对单通道图像的像素进行统计。本文将主要介绍利用C++ OpenCV实现的图像像素值统计的几种方法,需要的可以参考一下
    2022-01-01
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    本篇文章是对虚函数与纯虚函数进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论