c# - 在 C++ 中使用 Mono 获取程序集类

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

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

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

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

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

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

最佳答案

我找到了解决方案: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

关于c# - 在 C++ 中使用 Mono 获取程序集类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502846/

相关文章:

c# - Linux Mono + Postsharp + Log4Net = 没有自动异常捕获

asp.net - 无法在 Mono 3 上的 xsp 上运行 asp.net 4.5 应用程序

.net - 如何规范 .NET 和 Mono OSX 之间的变音符号字符串表示形式?

c# - 为什么这两个字符 £ 和 ¬ 没有被正确解码

c++ - std::chrono 添加天数到当前日期

c++ - 模板模板参数推导与 sfinae

c++ - 为什么 OpenGL 雾只是不出现?

c# - System.IO.IOException : 'The process cannot access the file ' @. txt'因为它正被另一个进程使用。'

c# - 使用 C# 在 Open XML 电子表格中创建查询表

c# - AllowHtml 属性不起作用