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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM