簡體   English   中英

單聲道嵌入,在不知道名稱空間的情況下獲取MonoClass *

[英]mono embedding, get MonoClass* without knowing the namespace

鑒於C#示例代碼下面這是很容易調用Bar.Work從C.靜態方法只需要獲得MonoClass* ,然后得到一個MonoMethod*從類並調用它。

事實是,為了獲得MonoClass*我需要為MonoClass*提供Bar的命名空間(在本例中為'sampleApp'作為參數。

MonoClass *klass = mono_class_from_name(image, "sampleApp", "Bar");

問題是,如果我不知道Bar的類名稱空間,如何在C中獲取MonoClass* 是否有任何方法可以從C獲取程序集中的類型列表? 我在mono的嵌入樣本中找不到任何示例。

C#示例

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");
    } 
  }

}

從C呼叫Bar.Work

#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;
} 

Afaik,Unity使用固定功能來解決此問題(Update(),Start())。 這些是統一調用的函數,被調用的腳本的所有其他函數都必須在此預定義函數中。

這就是腳本名稱必須與類名稱匹配的原因之一。 他們只是搜索文件夾並將腳本名稱用作類名稱。

不是您想要的答案,但我認為這是對此的最佳解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM