代码拉取完成,页面将自动刷新
#pragma once
#include "pch.h"
#include "Method.h"
#include "Field.h"
#include <unordered_map>
namespace mono
{
struct Clazz
{
std::string m_Name;
std::string m_Namespace;
MonoClass *m_Class;
std::unordered_map<std::string, std::shared_ptr<Clazz>> m_InnerClasses;
Clazz(MonoClass *clazz) : m_Class(clazz)
{
m_Name = mono_class_get_name(m_Class);
m_Namespace = mono_class_get_namespace(m_Class);
LoadInnerClasses();
}
bool HasInnerClass(const std::string &name)
{
return m_InnerClasses.find(name) != m_InnerClasses.end();
}
std::shared_ptr<Clazz> GetInnerClass(const std::string &name)
{
return m_InnerClasses.at(name);
}
std::shared_ptr<Field> GetField(const std::string& name)
{
return std::make_shared<Field>(m_Class, name.c_str());
}
std::shared_ptr<Method> GetMethod(const std::string &name, int numParams)
{
auto monoMethod = mono_class_get_method_from_name(m_Class, name.c_str(), numParams);
if (!monoMethod)
{
ztclog::info("Failed to load mono method: %s" , name.c_str());
return nullptr;
}
return std::make_shared<Method>(monoMethod);
}
std::shared_ptr<struct Object> NewInstance(bool runtimeInvoke = true);
MonoObject* NewInstanceObject();
void LoadInnerClasses()
{
void *iter = nullptr;
MonoClass *nestedClass;
while ((nestedClass = mono_class_get_nested_types(m_Class, &iter)) != nullptr)
{
std::string nestedClassName = mono_class_get_name(nestedClass);
m_InnerClasses[nestedClassName] = std::make_shared<Clazz>(nestedClass);
}
}
};
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。