【问题标题】:Getting the Assembly classes using Mono in C++在 C++ 中使用 Mono 获取程序集类
【发布时间】:2017-11-27 01:32:51
【问题描述】:

我正在创建一个游戏引擎,并正在使用Mono 实现一个 c# 脚本系统。

在我需要创建MonoClass 之前,我正在毫无问题地加载程序集信息。 要创建 MonoClass,我需要 MonoImage、命名空间和类名:

MonoClass* mono_class_from_name (MonoImage *image, const char* name_space, const char *name)

但是如果我没有创建 dll,我怎么知道命名空间和名称呢? (因为是用户使用引擎制作的编译脚本)。

我应该使用其他函数来加载 MonoClass 吗?哪一个?

【问题讨论】:

    标签: c# c++ mono visual-studio-2017


    【解决方案1】:

    我找到了解决方案:P

    std::list<MonoClass*> GetAssemblyClassList(MonoImage * image)
    {
       std::list<MonoClass*> class_list;
    
       const MonoTableInfo* table_info = mono_image_get_table_info(image, MONO_TABLE_TYPEDEF);
    
       int rows = mono_table_info_get_rows(table_info);
    
       /* For each row, get some of its values */
       for (int i = 0; i < rows; i++) 
       {
           MonoClass* _class = nullptr;
           uint32_t cols[MONO_TYPEDEF_SIZE];
           mono_metadata_decode_row(table_info, i, cols, MONO_TYPEDEF_SIZE);
           const char* name = mono_metadata_string_heap(image, cols[MONO_TYPEDEF_NAME]);
           const char* name_space = mono_metadata_string_heap(image, cols[MONO_TYPEDEF_NAMESPACE]);
           _class = mono_class_from_name(image, name_space, name);
           class_list.push_back(_class);
       }
       return class_list
    }
    

    如果您想了解更多信息:Metada access

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 2016-04-13
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多