zhouqijie

一、概述

Mono:

托管代码
Mono运行时
C++程序

使用脚本语言优势:

  1. 代码方便维护,安全性高。
  2. 易于使用,开发效率高,适合快速开发。

C和C#交互方式:

把C代码暴露在CLI中。内部调用和运行时紧密集成,不支持在运行时类型和C类型之间进行Marshal。

???(见Mono文档)

在.NET开发中最通用的方案。缺点是C++代码必须编译成DLL。

二、文档

http://docs.go-mono.com/?link=root:/embed

三、C++Mono运行环境配置

Mono安装:

创建C++项目:


四、Mono运行时和应用域的初始化

用Mono的编译器mcs编译:

编译源文件:

mcs Program.cs -t:library

编译有引用的源文件:

mcs -r:Program.dll TestScript.cs -t:library


在C++中创建Mono的应用域和运行时:

int main()
{
    //------------------初始化Mono运行时------------------

	// Program.cs所编译dll所在的位置
	const char* path = "C:/Users/dell-pc/Desktop/Test/MonoC++Test/MonoCSharp/MonoCSharp/Program.dll";

	//获取应用域
	domain = mono_jit_init("Test");

    //运行时配置 // 不设置则默认:(typically assemblies in /usr/lib/mono and configuration in /etc/mono)
	//mono_set_dirs("C:/Program Files (x86)/Mono/lib", "C:/Program Files (x86)/Mono/etc");
	//mono_config_parse(NULL);

	//mono_domain_set_config(...);//Added in Mono 3.8.0. Used to fix ConfigurationErrorsException in #10468

	//加载程序集
	MonoAssembly* assembly = mono_domain_assembly_open(domain, path);
	MonoImage* image = mono_assembly_get_image(assembly);

	//-------------------------------------------------------
    //???
	//???
	//-----------------释放应用域、结束------------------------
	mono_jit_cleanup(domain);
	return 0;
}