美文网首页
Mono嵌入C++(C++调用C#, Unity脚本的实现原理)

Mono嵌入C++(C++调用C#, Unity脚本的实现原理)

作者: 游戏架构师 | 来源:发表于2019-06-01 01:34 被阅读0次

作者原文章地址:
https://www.cnblogs.com/murongxiaopifu/p/4557365.html
自己照做的时候发现有很多错误,就记录下来供大家参考
1.安装homebrew

屏幕快照 2019-06-01 上午1.09.59.png

2.安装pkg-config工具
brew install pkgconfig

3.新建一个cpp文件
touch unity.cpp
4.写入cpp代码

#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()
{
    const char* managed_binary_path = "./ManagedLibrary.dll";
    //获取应用域
    domain = mono_jit_init (managed_binary_path);
    //mono运行时的配置
    mono_set_dirs("/Library/Frameworks/Mono.framework/Home/lib", "/Library/Frameworks/Mono.framework/Home/etc");
    mono_config_parse(NULL);
    //加载程序集ManagedLibrary.dll
    MonoAssembly* 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, "ManagedLibrary", "MainTest");
    //获取要调用的MonoMethodDesc
    MonoMethodDesc* entry_point_method_desc = mono_method_desc_new("ManagedLibrary.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;
}

5.创建CSharp文件
touch ManagedLibrary.cs
6.写入CSharp代码

namespace ManagedLibrary
{
   public static class MainTest
   {
       public static void Main()
       {
         System.Console.WriteLine("Hello World");
       }
   }
}

7.编译cpp文件

g++ -o unity  unity.cpp  -framework CoreFoundation -lobjc -liconv `pkg-config --cflags --libs mono-2`

8.运行结果


屏幕快照 2019-06-01 上午1.21.04.png

可能会遇到的问题:

Package mono-2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `mono-2.pc'
to the PKG_CONFIG_PATH environment variable

解决方法:
1.which mono 找到 mono pkgconfig文件夹


屏幕快照 2019-06-01 上午1.28.49.png

2.添加mono的pkgconfig到 pkg-config工具

export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig:$PKG_CONFIG_PATH

参考链接:

https://github.com/neikeq/GodotSharp/issues/48
https://www.cnblogs.com/cnland/archive/2013/02/08/2909273.html

相关文章

网友评论

      本文标题:Mono嵌入C++(C++调用C#, Unity脚本的实现原理)

      本文链接:https://www.haomeiwen.com/subject/blantctx.html