C# mono嵌入,在不知道名称空间的情况下获取MonoClass*

C# mono嵌入,在不知道名称空间的情况下获取MonoClass*,c#,c,mono,mono-embedding,C#,C,Mono,Mono Embedding,给定下面的C#示例代码,很容易从C调用Bar.Work静态方法。只需获得单类*,然后从类中获得单方法*,并调用它 问题是,为了获得MonoClass*,我需要向函数提供Bar的名称空间,在本例中,它是'sampleApp' MonoClass*klass=mono_class_from_name(图像,“sampleApp”,“Bar”) 问题是,如果我不知道Bar的类名称空间,如何在C中获得MonoClass*。是否有任何方法可以从C获取程序集中的类型列表?我在mono的嵌入示例中找不到任何示

给定下面的C#示例代码,很容易从C调用
Bar.Work
静态方法。只需获得
单类*
,然后从类中获得
单方法*
,并调用它

问题是,为了获得
MonoClass*
,我需要向函数提供Bar的名称空间,在本例中,它是
'sampleApp'

MonoClass*klass=mono_class_from_name(图像,“sampleApp”,“Bar”)

问题是,如果我不知道
Bar
的类名称空间,如何在C中获得
MonoClass*
。是否有任何方法可以从C获取程序集中的类型列表?我在mono的嵌入示例中找不到任何示例

C#样品 从C调用
Bar.Work
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
单声道配置解析(空);
MonoDomain*domain=mono_jit_init_版本(“app”,“v4.0.30319”);
MonoAssembly*assembly=mono_domain_assembly_open(域,“sampleApp.exe”);
MonoImage*image=mono_assembly_get_image(assembly);
mono_jit_exec(域、程序集、argc、argv);
//如果我不知道Bar类在sampleApp命名空间下,如何找到它?
MonoClass*klass=来自名称的mono_类(图像,“sampleApp”,“Bar”);
MonoMethod*method=mono\u class\u get\u method\u from\u name(klass,“Work”,0);
void*params[1]={NULL};
mono_运行时_调用(方法,NULL,参数,NULL);
mono_jit_清理(域、程序集);
返回0;
} 

好的,Unity正在使用固定函数来解决这个问题(Update(),Start())。这些是unity调用的函数,脚本中所有其他被调用的函数都必须在这个预定义函数中

这就是脚本名必须与类名匹配的原因之一。他们只是搜索文件夹并使用脚本名作为类名


这不是您想要的答案,但我认为这是最好的解决方案。

谢谢,我可能会尝试从程序集exe/dll推断名称空间。如果找不到它,我将把它配置为命令行参数。不管怎样,我只要在创业时找一个班就行了。
namespace sampleApp 
{

  class Bar {
    public static void Work() {
       Console.WriteLine("Bar.Work called");
    }
  }

  class Program {
    public static void Main(string[] args) {
        Console.WriteLine("Program.Main called");
    } 
  }

}
#include <mono/jit/jit.h>
#include <mono/metadata/mono-config.h>
#include <mono/metadata/metadata.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/class.h> 
#include <mono/metadata/assembly.h>
#include <mono/metadata/image.h>
#include <mono/metadata/object.h>
#include <mono/metadata/debug-helpers.h>

int main(int argc, char **argv) {

        mono_config_parse(NULL);
 
        MonoDomain *domain = mono_jit_init_version("app", "v4.0.30319");
        MonoAssembly *assembly = mono_domain_assembly_open(domain, "sampleApp.exe");  
        MonoImage *image = mono_assembly_get_image(assembly);  

        mono_jit_exec(domain, assembly, argc, argv);

        //how can I find Bar class if I don't know that it is under the sampleApp namespace?
        MonoClass *klass = mono_class_from_name(image, "sampleApp", "Bar");

        MonoMethod *method = mono_class_get_method_from_name(klass, "Work", 0);
        
        void *params[1] = { NULL };
        mono_runtime_invoke(method, NULL, params, NULL); 

        mono_jit_cleanup(domain, assembly);

        return 0;
}