• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#多线程案例基础发布时间:2022-07-13
下一篇:
相对路径转绝对路径C++实现发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap