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. 行业短信 运营思路_飞信、易信之后 三大运营商要借5G再战微信
  2. 新浪微博开放平台API中page参数的使用方法
  3. C++中多态与虚函数的学习例子
  4. 面试官:说出几个你熟悉的 Zookeeper 命令
  5. rust实战入门到进阶(3)
  6. 项目管理(4):备战pmp
  7. 在storm中使用流
  8. 极光推送指定用户推送_App用户都睡着了?是时候用推送和活动唤醒一波了!
  9. 收获,不止SQL优化——抓住SQL的本质--第四章
  10. 宁德时代是前8个月全球最大电动汽车电池供应商
  11. 3小时GIS入门教程(二)GIS数据格式、坐标系
  12. ICPC2019徐州区域赛 H.Yuuki and a problem
  13. 抖音直播间截流黑科技
  14. 设计模式六大原则之里氏替换原则、依赖倒置原则详解
  15. RN 与 Android 代码交互
  16. JS中substr和substring
  17. html中怎么制作太阳月亮交替,CSS3 简单的地球/太阳/月亮动画
  18. 网格搜索(调参)与数据预处理
  19. 10个迷惑新手的Cocoa,Objective-c开发难点和问题 39|MX21k
  20. Zuul2 的 线程模型

热门文章

  1. turbolinux mysql 5.0 cluste,Debian -- 新聞 -- Debian GNU/Linux 5.0 發布
  2. s1200 博图高速脉冲计数值没有变化_赤峰发泡硅胶板,高速公路橡胶垫橡胶厂-京品吉...
  3. debian下安装LNMP环境(二)
  4. 【PAT (Advanced Level) Practice】1037 Magic Coupon (25 分)
  5. python【蓝桥杯vip练习题库】ALGO-190素因子去重(数论 递归)
  6. 机器学习需要理解的五个基本概念
  7. Android UI开发
  8. 打开c语言运行不了_手机上有哪些不错的c语言编程软件?
  9. div中有元素刷新不出来_DNF:神话罐子来了!500个不渝材料就能换,但你刷新不出来...
  10. android 技能标签功能_android开发工程师必备技能