【发布时间】:2020-04-03 19:31:16
【问题描述】:
我正在尝试使用单声道和 c++ 实例化一个类并调用 c# 类的函数。
我的代码是:
mono_config_parse(NULL);
mono_set_assemblies_path("C:\\Users\\Oriorii\\Desktop\\MonoTest\\MonoScripts\\dlls");
MonoDomain* domain = nullptr;
domain = mono_jit_init("MonoScripts");
MonoAssembly* assembly = mono_domain_assembly_open(domain, "CSharp.dll"); // works
MonoImage* image = mono_assembly_get_image(assembly); // works
mono_jit_exec(domain, assembly, argc, argv);
MonoClass* klass = mono_class_from_name(image, nullptr, "Class1"); // fails
MonoMethodDesc* ctorDesc = mono_method_desc_new("Class1:Class1()", false); // works
MonoMethod* ctorMethod = mono_method_desc_search_in_class(ctorDesc, klass); // fails because klass is nullptr
MonoMethodDesc* doDesc = mono_method_desc_new("Class1::PrintTest()", false); // works
MonoMethod* doMethod = mono_method_desc_search_in_class(doDesc, klass); // fails because klass is nullptr
mono_jit_cleanup(domain);
而我的 c# 是:
using System;
public class Class1
{
public void PrintTest()
{
Console.WriteLine("HELLO!!");
}
}
问题出在这行'MonoClass* klass = mono_class_from_name(image, nullptr, "Class1");'该函数返回 nullptr 但下一行我执行 'MonoMethodDesc* ctorDesc = mono_method_desc_new("Class1:Class1()", false);'它不返回 nullptr。所以我不明白发生了什么。
我也尝试将 c# 类放入命名空间,但发生了同样的问题。
【问题讨论】: