用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统。C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和构建有性能要求的算法。
这两种场景看起来有较大的差异,大多数的时候可以各行其道。但还是有很多时候会出现融合的情况。当我们构建分布式系统的时候,由于RPC机制一般都是语言无关的,我们大可以将其各尽所长,按需划分在最能发挥其长处的位置。然而,一旦我们需要构建融合两者需求的集中式系统的时候,就会头痛无比。
此时,我们可以使用C++/CLI搭建C++和.Net之间的桥梁,C++/CLI是一个比较有意思的两栖模块,它具有如下特点
- 既可以访问.Net类库,也可以访问C++原生类库
- 既可以被.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#之间的桥梁(一)—— 简介相关推荐
- 用C++/CLI搭建C++和C#之间的桥梁(三)—— 基本类型
数值类型 对于基本的数值类型,在C++/CLI中是可以直接映射为托管类型的数值的,可以同时应用于托管类型和非托管类型,编译器会将其自动转换. 基本类型 System命名空间中对应的类 注释/用法 bo ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目
基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 转载于:https://github.com/Meowv/Blog 首先,默认咱们已经有了.net ...
- vue = 什么意思_记录使用@vue/cli搭建Vue3项目完整流程
最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...
- cli vue 卸载_记录使用@vue/cli搭建Vue3项目完整流程
最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...
- 在 Quasar cli 搭建的 vue 项目中 引用 阿里字体图标 iconfont symbol方式
在 Quasar cli 搭建的 vue 项目中 引用 阿里字体图标 iconfont 1. symbol 方式 2. font class 方式(未实践) 1. symbol 方式 首先说明一下,这 ...
- vue简易微前端项目搭建(一):项目背景及简介
github传送门: 1.h5主项目 2.项目脚手架 3.子项目模板 系列文章传送门: vue简易微前端项目搭建(一):项目背景及简介 vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建 vu ...
- 什么是用户与计算机硬件之间的桥梁,计算机应用基础简答题(附答案)
计算机应用基础简答题 1. 什么是操作系统?操作系统的作用是什么? 答:操作系统在计算机结构中处于硬件裸机与软件系统之间的层次上,它不仅管理位于内层的硬件资源,而且管理和协调外层各种软件资源,为用户提 ...
- 计算机裸机与应用程序及用户之间的桥梁是,2016计算机二级《MS Office》单选试题与解析...
2016计算机二级<MS Office>单选试题与解析 (1)下列叙述中正确的是 A)一个算法的空间复杂度大,则其时间复杂度也必定大 B)一个算法的空间复杂度大,则其时间复杂度必定小 C) ...
- LikeLib侧链:搭建区块链系统信任传递桥梁
几乎没有什么技术比区块链更能吸引关注和争议了.对某些人来说,这是未来革命性的技术:对另一些人来说,它是一个骗局或庞氏骗局. 我已经概述了科技在通往每个办公室,或许是全世界每个家庭的旅程中所面临的四个问 ...
最新文章
- redis 源码安装
- 基于matlab的霍夫变换,基于matlab的霍夫变换
- 深度学习(27)随机梯度下降五: 单输出感知机梯度
- 分享一个点赞超过100的漂亮ASP.NET MVC蓝色界面框架
- Linux Epoll 一网打尽
- 剑指offer31-栈的压入、弹出序列
- opencv学习笔记01
- html5元素用于组合标题元素,HTML5知识初级题目
- GDPR或使全球域名whois信息被隐藏
- Microsoft Office Visio 2007 免费下载
- 沙盘模拟软件_我院学生参加第十六届全国大学生“新道杯”沙盘模拟经营大赛喜获佳绩...
- 计算机网络hdcp是什么意思,韩立平:笔记本电脑上hdcp是干什么的?
- 企业工商信息数据API接口
- xml 入门 shema_01
- B站JavaScript从入门到精通Blue石川老师视频部分代码_运动升级_链式运动_土豆网
- php 正则匹配座机号、手机号
- java IP转换为国家省份城市
- PTA 7-98 海盗分赃 (25分)
- Java-打怪兽趣味小游戏(附效果图)
- 帧、关键帧和空白关键帧的作用
热门文章
- dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
- gnome mysql client_configure: error: Not found mysqlclient library
- 【Java Web开发指南】Java插入中文到数据库中文变成问号解决
- Android四种启动模式
- 算法提高 c++_ch04_02_修正版
- 怎么把mysql转换mssql_MySQL如何转SQL server
- 外贸网络推广浅析新建网站该如何更快速进入搜索结果首页?
- 新站SEO优化如何吸引搜索引擎蜘蛛的爬行?
- php计划任务每天12点执行一次,php定时执行计划任务之直接在php中执行
- Ciruy英雄谭 Chapter 3 杂谈