如何将功能暴露给插件库

How do you expose functionality to a plugin library?

本文关键字:插件 暴露 功能      更新时间:2023-10-16

如果我有一个程序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。

通常当我开发一个插件时,我通常会提供一个插件创建者可以依赖的接口。

通过这个接口,插件可以访问我允许它查看和交互的对象和类