Mono提供脚本机制(C#绑定C++)

1.下载安装最新版mono,https://www.mono-project.com/

2.添加头文件路径C:\Program Files\Mono\include\mono-2.0,添加库路径C:\Program Files\Mono\lib,添加依赖项mono-2.0-sgen.lib

3.c#类库工程

 1 using System;
 2 
 3 namespace csharp
 4 {
 5     public class BindingTest
 6     {
 7         static void sayhello()
 8         {
 9             Console.WriteLine("hello world, [cpp binding csharp test]");
10         }
11     }
12 }

4.c++引入mono运行时

 1 // cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
 2 //
 3 
 4 #include "pch.h"
 5 #include <iostream>
 6 #include <mono/jit/jit.h>
 7 #include <mono/metadata/assembly.h>
 8 #include <mono/metadata/class.h>
 9 #include <mono/metadata/debug-helpers.h>
10 #include <mono/metadata/mono-config.h>
11 #include <exception>
12 //#include <direct.h>
13 
14 int main()
15 {
16     //std::cout << "Hello World!\n"; 
17     // 打印当前路径
18     //std::cout << _getcwd(nullptr, 0);
19 
20     MonoDomain *domain;
21     //const char *csharp_dll = "../csharp/bin/debug/csharp.dll";
22     const char *csharp_dll = "../csharp/BindingTest.dll";
23     try
24     {
25         // 初始化JIT
26         domain = mono_jit_init("csharp");
27         // 加载程序集
28         MonoAssembly *assembly = mono_domain_assembly_open(domain, csharp_dll);
29         MonoImage *image = mono_assembly_get_image(assembly);
30         // 获取MonoClass
31         MonoClass *mono_class = mono_class_from_name(image, "csharp", "BindingTest");
32         // 获取方法
33         //MonoMethodDesc *method_desc = mono_method_desc_new("csharp.BindingTest:Main()", true);
34         MonoMethodDesc *method_desc = mono_method_desc_new("csharp.BindingTest:sayhello()", true);
35         MonoMethod *method = mono_method_desc_search_in_class(method_desc, mono_class);
36         mono_method_desc_free(method_desc);
37         // 调用方法
38         mono_runtime_invoke(method, nullptr, nullptr, nullptr);
39         // 释放JIT
40         mono_jit_cleanup(domain);
41     }
42     catch (std::exception* e)
43     {
44         std::cout << e->what();
45     }
46 }
47 
48 // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
49 // 调试程序: F5 或调试 >“开始调试”菜单
50 
51 // 入门提示: 
52 //   1. 使用解决方案资源管理器窗口添加/管理文件
53 //   2. 使用团队资源管理器窗口连接到源代码管理
54 //   3. 使用输出窗口查看生成输出和其他消息
55 //   4. 使用错误列表窗口查看错误
56 //   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
57 //   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

5.运行结果


unity3d关于mono研究的主题文章:http://www.cnblogs.com/lancidie/p/5877231.html

 

posted @ 2018-09-21 14:46  非法关键字  阅读(2086)  评论(0编辑  收藏  举报