如何将功能暴露给插件库
How do you expose functionality to a plugin library?
如果我有一个程序foo.exe,它在运行时加载插件bar.dll,我如何让bar.dll中的代码使用foo.exe中的类?bar.dll是否有可能从foo.exe派生类?此外,解决方案是否跨平台?
编辑:这是我想做的更多事情:
//foo.exe
class Node {
public:
void SetName(const string& n) { ... }
const string& GetName() { ... }
};
//bar.dll
class TransformNode : public Node {
public:
void DoSomething() {
SetName(...); //basically, can I inherit functionality from foo.exe (SetName and GetName)
//and reuse the code in a derived class in bar.dll?
}
};
为了让bar.dll使用foo.exe中的类,你需要将一个类的实例与foo.exe中的虚函数传递给bar.dll。Bar.dll将调用来自foo.exe的虚函数。
是的,bar.dll可以将派生类传递回foo.exe,然后让foo.exe调用所述类的虚函数。
这个解决方案将是跨平台的,但你将有主要的问题,以确保你不破坏共享库和exe之间的abi。即使是最简单的更改也很容易破坏abi。
通常当我开发一个插件时,我通常会提供一个插件创建者可以依赖的接口。
通过这个接口,插件可以访问我允许它查看和交互的对象和类
相关文章:
- 从C++本机插件更新Vector3数组
- 使用CMake创建QML插件
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- clang 插件:在编译过程中修改 AST
- 实现动态插件管理器
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- Agora.io 虚幻引擎插件构建错误
- 使用带有C++对象和标准库容器的插件系统
- 运行命令 "rosbag play example.bag" 时出错。找不到与插件 rosbag/NoEncryptor 对应的库
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 通过 Gazebo 世界插件将静态对象附加到机器人链接
- 如何为模块化应用程序实现C++插件系统
- 'string'文件在带有C++文件的iOS插件上找不到
- 在 Android 上安装 GStreamer 插件
- 如何使用MSVC 2019创建和使用Qt 5.14.0自定义小工具插件
- 如何在 Windows 操作系统中在 geany 中安装插件
- 节点插件 API 将数组作为函数参数传递
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 如何将功能暴露给插件库