c# - Mono c# 获取类
问题描述
我正在尝试实例化一个类并使用带有 c++ 的单声道调用 ac# 类的函数。
我的代码是:
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前面有句号。)
推荐阅读
- selenium - 我无法使用硒单击下拉元素
- java - 如何提高在 MNIST 上训练的模型的数字识别?
- algorithm - 在递归/缩进树数据结构之间转换
- c - 一些字符的格式化问题,但其他字符很好
- swift - imageProvider 不在 Graphic Complication Watch OS5 中显示图像
- python - 如何将非常长的时间戳转换为日期时间(19 位)(9876432101234567890)
- git - 黑色作为预提交钩子总是使我的提交失败
- python-3.x - 有没有办法使用 python 将不同的作业(进程)分配给 linux 中的特定核心?
- java - 对象不是 JUnit 中声明类的实例
- javascript - JavaScript 爬虫 .push() 和 pop() 方法在终端中工作,但在控制台中返回错误