在 C++ 中使用 Mono 获取程序集 类
Getting the Assembly classes using Mono in C++
我正在创建一个游戏引擎,我正在使用 Mono.
实现一个 c# 脚本系统
在我需要创建 MonoClass 之前,我加载程序集信息没有问题。
要创建 MonoClass,我需要 MonoImage、命名空间和 Class 名称:
MonoClass* mono_class_from_name (MonoImage *image, const char* name_space, const char *name)
但是我没有创建dll怎么知道Namespace和Name呢? (因为是用户使用引擎制作的编译脚本)。
我应该使用其他函数来加载 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
我正在创建一个游戏引擎,我正在使用 Mono.
实现一个 c# 脚本系统在我需要创建 MonoClass 之前,我加载程序集信息没有问题。 要创建 MonoClass,我需要 MonoImage、命名空间和 Class 名称:
MonoClass* mono_class_from_name (MonoImage *image, const char* name_space, const char *name)
但是我没有创建dll怎么知道Namespace和Name呢? (因为是用户使用引擎制作的编译脚本)。
我应该使用其他函数来加载 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