Mono c# Getting the class



我正在尝试使用mono和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#类放入一个名称空间,但也遇到了同样的问题。

将其作为进行尝试

MonoClass* klass = mono_class_from_name(image, "", "Class1");

相反。这对我很有效。

此外,如果您需要创建一个类实例而不需要将参数传递给构造函数,则可以使用

MonoObject *ClassInstance = mono_object_new(domain, klass);
mono_runtime_object_init(ClassInstance);

由于您使用的是"Class1:Class1((",因此您寻找构造函数的方式将不起作用。相反,它应该是"Class1:.ctor(("。(请注意,ctor前面有一个句点。(

相关内容

最新更新