.NET Core3.1编写混合C++程序
前言
随着 .net core 3.1 的第二个预览版本发布,微软正式将 c++/cli 移植到 .net core 上,从此可以使用 c++ 编写 .net core 的程序了。
由于目前仅有 msvc 支持编译此类混合代码,并且由于涉及到非托管代码,因此 c++/cli 目前不能跨平台,只支持 windows。
如果需要跨平台,除了微软的工作之外,还另外需要 gcc/clang 大量跟进,工作量较大且进度不可控,目前微软暂无使 c++/cli 跨平台的计划。
先决条件
visual studio 2019 16.4 preview 3
.net core sdk 3.1 preview 2
开启方法
运行 visual studio installer,安装“使用 c++ 的桌面开发” 和 “.net core 跨平台开发” 工作负载,然后再在单个组件中勾选“对 v142 生成工具 (14.24) 的 c++/cli 支持”。
等待安装完毕,启动 visual studio,新建项目的时候即可看见两个新增的项目模板:
- clr class library (.net core)
- clr empty project (.net core)
第一个项目
我们选择 clr empty project (.net core) 创建我们的第一个 c++/cli 项目,然后在右侧解决方案管理器的源文件(source files) 处右键添加 c++ 源文件 main.cpp。
然后我们即可使用 c++ 编写 .net core 程序。
添加以下代码:
运行程序,输入 hello world 后回车:
可以看到我们成功的运行了程序并且完成了 c++ 代码与 .net core 的无缝交互。
注意点
- 托管堆对象的创建使用 gcnew,而不是 new
- 托管堆对象指针的类型为 t^,而不是 t*,以上述代码为例,str_managed 的类型为 system::string^。得益于 c++ 11 开始有的类型自动推导,我们可以直接使用 auto 代替显示类型声明,类似 c# 中的 var。
- 使用 :: 代替 . 访问 namespace 和 class/struct,使用 -> 代替 . 访问对象中的成员。
- 使用 ref class/ref struct 定义 .net 引用类型,使用 value class/value struct 定义 .net 值类型。
- 使用 interface class/interface struct 定义接口。
- 使用 property 定义属性。
- c++/cli 项目可以引用任何的 c++ 项目或动态链接库,但是要确保架构相同,即你不能用 x86 的配置引用 x64 架构下的非托管代码。
添加项目引用并使用
对于引用 c++ 代码,在此不进行赘述,使用方式和正常的 c++ 项目没有任何区别。因此在这里只说如何引用 .net 程序集。
我们可以直接添加对 .net standard/.net core library 的引用。如果出现无法使用 nuget 包管理器安装的情况,可以手动下载对应的 .net 程序集 dll 然后添加到项目引用当中。这里以 newtonsoft.json 为例。
首先添加引用
然后我们就能使用啦!
然后我们编写一个 .net 类型,为了展示的更完整,我们采用完整的属性书写方法,而不是自动属性。
然后我们构建一段 json 字符串,试试用 newtonsoft.json 解序列化。
运行,输出:
后记
虽然 c++/cli 暂时不能跨平台,但是对 .net core 的支持极大的丰富了 .net core 的适用范围,可以用于编写高性能的 c++ 程序的同时,享受来自 c++ 和 .net core/.net standard 的全部生态。
对于编写 windows 程序,c++/cli 绝对值得一试。而关于跨平台的问题,说不定后面的版本微软就支持了呢?要知道,两年前 c++/cli 在 .net core 上运行微软给的回复也是“没有计划”,然而如今却顺利的完整支持了。
对于 c++/cli 的其他地方,可以参考微软官方文档,内容十分丰富(由于中文文档存在部分机器翻译,建议有能力的朋友直接阅读英文文档避免机器翻译带来的错误):
参考文献
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 浅谈.Net Core 认证系统源码解析
下一篇: mysql-调优
推荐阅读
-
.NET Core 3.1 编写混合 C++ 程序
-
.NET CORE与Spring Boot编写控制台程序应有的优雅姿势
-
win10用visual studio进行c++程序编写的方法
-
使用C++来编写Ruby程序扩展的教程
-
编写一个C++程序,它显示您的姓名和地址
-
C++ 实验二 NO.1_(3) 1:熟悉DEV环境,练习自己的第一个程序使用DEV集成环境来编辑,运行简单的数据输入和运算实验。(3)编写一个程序,要求:提示输入3个数;显示这3个数,求他们的平均值
-
vs2019 下用 vb.net编写窗体程序连接 mongodb4.2的方法
-
详解Dev C++使用教程(使用Dev C++编写C语言程序)
-
VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100.dll, xxx100d.dll等的解决方法
-
Dev C++安装使用图文教程(使用Dev C++编写C语言程序)