1 Star 0 Fork 0

2144/mono_lib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Clazz.h 1.88 KB
一键复制 编辑 原始数据 按行查看 历史
2144 提交于 2024-10-26 12:33 . ss
#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);
}
}
};
};
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/iamherer/mono_lib.git
git@gitee.com:iamherer/mono_lib.git
iamherer
mono_lib
mono_lib
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385