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

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&#43;&#43;超详细讲解模板的使用目录一、函数模板1.1函数模板概念1.2 函数模板格式1.3 函数模板的原理1.4 函数模板的实例化二、类模板

    C++学习之多态的使用详解

    C&#43;&#43;学习之多态的使用详解目录前言多态向上转型向下转型作用域前言
    最近为了完成数据库系统的实验,又复习起了《C&#43;&#43; Prim

    c++实现md5加密的代码

    c&#43;&#43;实现md5加密的代码最近发现md5加密算法挺有趣,特点是单向加密不可逆,加密后的字符串长度相等,于是就用C&#43;&#43;尝试实现了一

    C++实现优先队列的示例详解

    C&#43;&#43;实现优先队列的示例详解目录前言堆的存储方式维护堆的方法1、上浮操作2、下沉操作附上代码前言
    首先,啊,先简单介绍一下优先队

    C++实现简易通讯录功能

    C&#43;&#43;实现简易通讯录功能目录实现功能一、定义通讯录和通讯录人员结构体二、实现通讯录输入菜单1.定义菜单函数:2.主函数循环体中

    C++实现通讯录系统项目实战

    C&#43;&#43;实现通讯录系统项目实战本文实例为大家分享了C&#43;&#43;实现通讯录系统项目的具体代码,供大家参考,具体内容如下
    制作一个具

    C++实现通讯录小功能

    C&#43;&#43;实现通讯录小功能本文实例为大家分享了C&#43;&#43;实现通讯录功能的具体代码,供大家参考,具体内容如下
    思路:
    1.显示菜单栏
    voi

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

    C&#43;&#43;实现简易通讯录管理系统目录前言结构体联系人结构体通讯录结构体函数模块菜单添加联系人显示联系人判断联系人删除联系人查

    C++实现通讯录管理系统项目

    C&#43;&#43;实现通讯录管理系统项目本文实例为大家分享了C&#43;&#43;实现通讯录管理系统的具体代码,供大家参考,具体内容如下
    1、通讯录设