我希望能够从C ++调用CLR类的方法。特别是某些类可能包含重载方法,因此我需要根据方法名称和参数签名搜索类的方法。
我有这样的功能:
MonoMethod* find_method (
MonoDomain* domain,
MonoClass* type,
const char* name,
int nargs,
MonoClass** types)
我遍历类的成员,按名称查找匹配的成员。然后我需要检查方法的参数,看看它们是否与此函数的types参数中所需的列表匹配。
然后使用 mono_signature_get_params()
来迭代具有匹配名称的每个方法的参数。
问题: 我该怎么做:
MonoClass*
的{{1}}常量等。
以下是2个辅助函数,在访问MonoType *或MonoClass *中的字段时无法编译,编译器抱怨表明这两个结构不完整:
int32_class, int64_class
答案 0 :(得分:2)
您不得包含私人单声道标题:当我们对内部进行更改时,您的应用会中断。
要从MonoType *访问类型枚举值,您需要调用mono_type_get_type()函数(来自metadata / metadata.h)。对于MONO_TYPE_CLASS和MONO_TYPE_VALUETYPE,您可以使用mono_type_get_class()访问MonoClass *值。
要比较两个签名的相等性,可以使用mono_metadata_signature_equal():请注意,使用MonoClass *来表示参数的类型从根本上是不正确的,因为它不能表示,例如,通过引用传递的参数。
如果需要通过赋值匹配,可以使用mono_class_is_assignable_from(),但请注意,您需要处理byref参数,决定是否要允许枚举类型自动转换为其基础整数类型等。
基本类型类可以通过以下函数轻松检索: mono_get_int32_class(),mono_get_boolean_class()等。