现有的答案涵盖了一般情况,但它们有点模糊,我需要确定这一点。
考虑:
- 从抽象基类“接口”派生的现有定义类。
- 类是库的一部分,它被编译成多个通过接口相互通信的 dll。
然后加:
- 现在将派生定义的类的第二个“接口”(所以现在它有两个接口)。
- 新接口访问的已定义类的新虚拟方法。
我需要重新编译链接这个库的每个 dll,还是只需要重新编译使用新方法的 dll?
编辑:
我的原始界面公开了一个动态方法,是否Dynamic(int OP, void* args)
可以添加一个转换为新界面的操作?
COM 如何在不破坏现有接口的情况下向对象添加新接口?它是否堆叠接口,使用多重继承等???
让我列出它的工作方式。
静态链接库接口
In statically linked library
class Interface1
{
virtual Method1() = 0;
virtual Method2() = 0;
}
class NotReallyInterface2 : Interface1
{
virtual Method1() = 0;
virtual Method2() { // does something }
}
在 dll 中
In A.dll
Load statically linked library
class A : NotReallyInterface2
{
virtual Method1() { // does something }
}
In B.dll
Load statically linked library
class B: NotReallyInterface2
{
virtual Method1() { // does something different }
}
我想添加
class Interface3
{
virtual Method3() = 0;
}
我这里有一些问题,因为我的继承结构看起来像。
[a.dll [ library : Interface1 < NotReallyInterface2 ] < A ]
[b.dll [ library : Interface1 < NotReallyInterface2 ] < B ]
所以我害怕
[ a.dll [ library : Interface1 < NotReallyInterface2 ] < Interface3 < A ]
不会工作。
编辑 2
所以我发现了我的问题。显然,其他 dll 和可执行文件正在引用我的NotReallyInterface2
. 这意味着多个 dll 和 exe 正在构建相同的基类。因此,如果这些基类的“副本”不同步,那么这艘船就会失败。这意味着我无法更改NotReallyInterface2
.
如果没有人提及NotReallyInterface2
,这将起作用,我现在从答案中得到了这一点,整个事情都说得通了。