如果我有一个程序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?
}
};
答案 0 :(得分:2)
为了让bar.dll使用来自foo.exe的类,您需要将具有虚函数的类的实例从foo.exe传递到bar.dll。 Bar.dll将调用来自foo.exe的虚函数。
是的,bar.dll可以将派生的clases传递回foo.exe,然后让foo.exe调用所述类的虚函数。
此解决方案将是跨平台的,但您将遇到重大问题,确保您不会在共享库和exe之间断开abi。即使是最简单的变化也很容易打破abi。
This是打破abi的好介绍。
答案 1 :(得分:1)
通常在开发插件时,我通常会提供插件创建者可以依赖的界面。
通过此接口,插件可以访问我允许其查看和交互的对象和类。