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

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

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

  1. 既可以访问.Net类库,也可以访问C++原生类库
  2. 既可以被.Net程序引用,也可以被C++原生程序引用

使用C++/CLI,我们可以使用C++编写算法,用C#编写界面,也可以使用.Net Framework类库增强C++程序功能,各取所长。关于的优点,园子里有篇文章介绍的比较详细,值得一读:从C++到C++/CLI。

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

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的支持,现在已经比之前好用多了,如果用在合适的位置,是绝对能让你的开发如鱼得水的。

转载于:https://www.cnblogs.com/TianFang/p/4931879.html

用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介相关推荐

  1. 用C++/CLI搭建C++和C#之间的桥梁(三)—— 基本类型

    数值类型 对于基本的数值类型,在C++/CLI中是可以直接映射为托管类型的数值的,可以同时应用于托管类型和非托管类型,编译器会将其自动转换. 基本类型 System命名空间中对应的类 注释/用法 bo ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目

    基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 转载于:https://github.com/Meowv/Blog 首先,默认咱们已经有了.net ...

  3. vue = 什么意思_记录使用@vue/cli搭建Vue3项目完整流程

    最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...

  4. cli vue 卸载_记录使用@vue/cli搭建Vue3项目完整流程

    最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...

  5. 在 Quasar cli 搭建的 vue 项目中 引用 阿里字体图标 iconfont symbol方式

    在 Quasar cli 搭建的 vue 项目中 引用 阿里字体图标 iconfont 1. symbol 方式 2. font class 方式(未实践) 1. symbol 方式 首先说明一下,这 ...

  6. vue简易微前端项目搭建(一):项目背景及简介

    github传送门: 1.h5主项目 2.项目脚手架 3.子项目模板 系列文章传送门: vue简易微前端项目搭建(一):项目背景及简介 vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建 vu ...

  7. 什么是用户与计算机硬件之间的桥梁,计算机应用基础简答题(附答案)

    计算机应用基础简答题 1. 什么是操作系统?操作系统的作用是什么? 答:操作系统在计算机结构中处于硬件裸机与软件系统之间的层次上,它不仅管理位于内层的硬件资源,而且管理和协调外层各种软件资源,为用户提 ...

  8. 计算机裸机与应用程序及用户之间的桥梁是,2016计算机二级《MS Office》单选试题与解析...

    2016计算机二级<MS Office>单选试题与解析 (1)下列叙述中正确的是 A)一个算法的空间复杂度大,则其时间复杂度也必定大 B)一个算法的空间复杂度大,则其时间复杂度必定小 C) ...

  9. LikeLib侧链:搭建区块链系统信任传递桥梁

    几乎没有什么技术比区块链更能吸引关注和争议了.对某些人来说,这是未来革命性的技术:对另一些人来说,它是一个骗局或庞氏骗局. 我已经概述了科技在通往每个办公室,或许是全世界每个家庭的旅程中所面临的四个问 ...

最新文章

  1. redis 源码安装
  2. 基于matlab的霍夫变换,基于matlab的霍夫变换
  3. 深度学习(27)随机梯度下降五: 单输出感知机梯度
  4. 分享一个点赞超过100的漂亮ASP.NET MVC蓝色界面框架
  5. Linux Epoll 一网打尽
  6. 剑指offer31-栈的压入、弹出序列
  7. opencv学习笔记01
  8. html5元素用于组合标题元素,HTML5知识初级题目
  9. GDPR或使全球域名whois信息被隐藏
  10. Microsoft Office Visio 2007 免费下载
  11. 沙盘模拟软件_我院学生参加第十六届全国大学生“新道杯”沙盘模拟经营大赛喜获佳绩...
  12. 计算机网络hdcp是什么意思,韩立平:笔记本电脑上hdcp是干什么的?
  13. 企业工商信息数据API接口
  14. xml 入门 shema_01
  15. B站JavaScript从入门到精通Blue石川老师视频部分代码_运动升级_链式运动_土豆网
  16. php 正则匹配座机号、手机号
  17. java IP转换为国家省份城市
  18. PTA 7-98 海盗分赃 (25分)
  19. Java-打怪兽趣味小游戏(附效果图)
  20. 帧、关键帧和空白关键帧的作用

热门文章

  1. dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
  2. gnome mysql client_configure: error: Not found mysqlclient library
  3. 【Java Web开发指南】Java插入中文到数据库中文变成问号解决
  4. Android四种启动模式
  5. 算法提高 c++_ch04_02_修正版
  6. 怎么把mysql转换mssql_MySQL如何转SQL server
  7. 外贸网络推广浅析新建网站该如何更快速进入搜索结果首页?
  8. 新站SEO优化如何吸引搜索引擎蜘蛛的爬行?
  9. php计划任务每天12点执行一次,php定时执行计划任务之直接在php中执行
  10. Ciruy英雄谭 Chapter 3 杂谈