Extra2D/include/plugin/iplugin.h

93 lines
2.3 KiB
C
Raw Normal View History

#pragma once
#include <types/base/types.h>
#include <string>
#include <vector>
namespace extra2d {
/**
* @brief
*/
struct PluginInfo {
std::string name; // 插件名称
std::string version; // 版本号
std::string author; // 作者
std::string description; // 描述
std::vector<std::string> dependencies; // 依赖的插件名称列表
};
/**
* @brief - 线
*
* /
* 线
*
*
* -
* -
* - 线
*/
class IPlugin {
public:
virtual ~IPlugin() = default;
/**
* @brief
* @return
*/
virtual const PluginInfo& getInfo() const = 0;
/**
* @brief
*
*
* false
*
* @return
*/
virtual bool load() { return true; }
/**
* @brief
*
*
* RAII
*/
virtual void unload() {}
/**
* @brief
* @return
*/
virtual std::vector<std::string> getDependencies() const {
return getInfo().dependencies;
}
};
} // namespace extra2d
// ============================================================================
// 插件导出宏(用于动态库插件)
// ============================================================================
#ifdef _WIN32
#define EXTRA2D_PLUGIN_EXPORT extern "C" __declspec(dllexport)
#else
#define EXTRA2D_PLUGIN_EXPORT extern "C" __attribute__((visibility("default")))
#endif
/**
* @brief
*
* 使
* EXTRA2D_DEFINE_PLUGIN(MyPluginClass)
*/
#define EXTRA2D_DEFINE_PLUGIN(PluginClass) \
EXTRA2D_PLUGIN_EXPORT extra2d::IPlugin* extra2d_create_plugin() { \
return new PluginClass(); \
} \
EXTRA2D_PLUGIN_EXPORT void extra2d_destroy_plugin(extra2d::IPlugin* plugin) { \
delete plugin; \
}