Mono c#获取课程

问题描述 投票:0回答:1

我正在尝试使用c ++使用mono来实例化一个类并调用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#类放入一个命名空间,但是发生同样的问题。

c# c++ mono
1个回答
0
投票

尝试使用

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

相反。这对我有用。

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

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

因为您正在使用“ Class1:Class1()”,所以您无法使用构造函数的方式。相反,我认为它应该是“ Class1:.ctor()”。

© www.soinside.com 2019 - 2024. All rights reserved.