前言

本教程是针对需要将C#作为自己所开发的C++项目提供脚本的入门教程。由于mono教程相对较少,或缺乏完整性,故作此教程。虽然是教程,但是作者仍然是一个水平有限的程序员,因此文中如有纰漏请指正,我将尽力修改完善!!

开发环境搭建

操作系统:windows7
Mono版本:4.4
mono下载地址:http://www.mono-project.com/download/
下载后安装mono,安装过程略过。64位安装完成后将在:C:\Program Files\Mono找到生成Mono的Windows的运行时。32位可能会在C:\Program Files (x86)\Mono下

设置环境变量,将添加以下变量至Path路径下面:C:\Program Files\Mono\bin


创建VS工程并初始化—Mono,Hello World##

####一、新建工程并依赖

####二、根据下载的mono的版本,设置编译生成的目标位X64 或 X86

####三、设置包含路径、库目录路径、附加依赖项
include:
C:\Program Files\Mono\include\mono-2.0
lib
C:\Program Files\Mono\lib

附加依赖项
mono-2.0.lib

####四、拷贝mono的运行dll到工作目录下面【关键步骤】

#####特别说明:由于mono运行时,bin中提供的mono-2.0.dll并不完整,因此需要找到mono提供的完整的dll。同样还是在C:\Program Files\Mono\bin目录下面,有libmonoboehm-2.0.dlllibmonosgen-2.0.dll

这两个都可以,由于没有认真分析两个dll之间的差异,所以就没有深究了,复制其中一个到C++工作路径下面。并修改其名称为:mono-2.0.dll

####五、编写HelloMono,并通过Mono编译器生成dll,用于在C++中调用运行

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MonoCsharp
{public static class MainTest{static void Main(){System.Console.WriteLine("你好,世界");System.Console.Read();}}
}

在Window下运行cmd命令提示符,并制定到上面源码所在位置:并输入Mono的命令:
###mcs Program.cs -t:library
(如果命令中提示:不是内部或外部命令,也不是可运行的程序),那么就检查下是否设置了环境变量
此时就会生成Program.cs所对应的C#dll


####最后一步,在C++中调用运行C#脚本

#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/class.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/mono-config.h>MonoDomain *domain;int main()
{// Program.cs所编译dll所在的位置const char* managed_binary_path = "E:/2017/2/MonoRunTime/MonoRunTime/Program.dll";//获取应用域domain = mono_jit_init("Test");//加载程序集ManagedLibrary.dllMonoAssembly* assembly = mono_domain_assembly_open(domain, managed_binary_path);MonoImage* image = mono_assembly_get_image(assembly);// =====================================================准备调用//获取MonoClass,类似于反射MonoClass* main_class = mono_class_from_name(image,"MonoCsharp", "MainTest");//获取要调用的MonoMethodDesc,主要调用过程MonoMethodDesc* entry_point_method_desc = mono_method_desc_new("MonoCsharp.MainTest:Main()", true);MonoMethod* entry_point_method = mono_method_desc_search_in_class(entry_point_method_desc, main_class);mono_method_desc_free(entry_point_method_desc);//调用方法mono_runtime_invoke(entry_point_method, NULL, NULL, NULL);//释放应用域mono_jit_cleanup(domain);return 0;
}

如果不出意外:就会出现C#工程的窗口了!

Mono入门教程(一)--------------C++中整合Mono相关推荐

  1. ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用

    ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 原文:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 文章来源: Slark.N ...

  2. 【前端实例代码】使用 HTML CSS实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 网页开发中常见的样式与特效,收藏起来肯定用的上~

    b站视频演示效果: [web前端特效源码]使用 HTML CSS 和 JavaScript 实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 效果图: 完整代码: <!DOCTYP ...

  3. 新手入门教程-------Spring Boot中集成RabbitMQ

    AMQP:是Advanced Message Queuing Protocol的简称,高级消息队列协议,是一个面向消息中间件的开放式标准应用层协议. 定义了以下特性: 消息方向 消息队列 消息路由(包 ...

  4. TensorFlow入门教程(18)语音识别(中)

    # #作者:韦访 #博客:https://blog.csdn.net/rookie_wei #微信:1007895847 #添加微信的备注一下是CSDN的 #欢迎大家一起学习 # 6.提取音频数据的M ...

  5. PyCharm入门教程——在编辑器中使用拖放

    PyCharm最新版本下载 JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.此外,该IDE提供了一些高级功能,以用于 ...

  6. PyCharm入门教程——在编辑器中选择文本

    PyCharm最新版本下载 JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.此外,该IDE提供了一些高级功能,以用于 ...

  7. 初学者python编辑器选pycharm_PyCharm入门教程——在编辑器中选择文本|python基础教程|python入门|python教程...

    选择文本的基本方法是用鼠标光标扩展选择.PyCharm作为一个以键盘为中心的IDE,建议使用导航键进行选择. 您可以选择选择文本片段,或在列模式下选择矩形片段,扩展和收缩选择,使用多重选择和粘性选择. ...

  8. (三)GearVR开发应用入门教程:Unity中OculusVR的UI交互

    Unity中Oculus VR的UI交互 谈到UnityUI交互,首先我们先来看下Unity的UI系统中几个关键的组成部分: · EventSystem  · InputModules  · RayC ...

  9. matlab怎么删除对象,ROS与Matlab语言入门教程-在Gazebo中增加、建立和移除对象

    本例程探索如何深层次地与MATLAB中的Gazebo仿真器交互.主题包括创建简单的模型.增加链接和加入模型.将模型连接在一起和应用力到物体. 预备知识:"4.2 开始使用Gazebo和仿真的 ...

最新文章

  1. 符合.net准则的事件
  2. 使用DataGridView数据窗口控件,构建用户快速输入体验
  3. 解决WP7的32位图像渐变色色阶问题
  4. python 内存溢出能捕获吗,Python——写自己的异常(形成强大的捕捉和处理能力)...
  5. 机器学习 - 随机森林手动10 折交叉验证
  6. 问题管理——“斩草需除根”
  7. 三位数流水码的生成(000·····009··00A····00Z····ZZZ)
  8. STM8输出PWM变频时波形断开解决方法
  9. C++类的构造函数、析构函数与赋值函数
  10. SD-WAN技术分析
  11. linux logo程序设计,Android开机LOGO的修改
  12. 2022年计算机视觉3大趋势
  13. 20考研暨南大学上岸经验贴QAQ
  14. 202012月计算机考试时间,年全国计算机等级考试时间(范文).docx
  15. 金庸年度最新十大广告
  16. 手机计算机应用的图片,怎么把手机的照片传到电脑 四种方法轻松导入
  17. 【转】精益看板核心实践大作战
  18. Beyond Part Models: Person Retrieval with Refined Part Pooling (ECCV2018)
  19. 零基础也能学会的——用Python制作超级玛丽小游戏
  20. Springboot,SSM及SSH的概念、优点、区别及缺点

热门文章

  1. 原生JS实现PC端无缝滚动轮播图、匀速轮播图、匀速动画
  2. 迅雷Q2季报图解:净利70万美元 环比下降91%
  3. 【英语总结】11月英语
  4. YOLOv5/v7 的改进点合集导航页 (新增YOLOv5/v7网络结构图)
  5. 内存踩踏/memcopy
  6. OpenGL入门 矩阵堆栈实现简单行星系统
  7. Python绘制RSI相对强弱指标图
  8. arcgis画线根据长度_如何使用Arcgis进行画线与面并计算大小?
  9. html超链接1003无标题,爱特漫画1003无标题
  10. 存储在icloud云盘文件夹顶层_iCloud云盘文件夹共享功能使用方法