DLL和EXE中具有相同名称和父级但具有不同实现的类中的问题

问题描述 投票:0回答:1

我有一个名为Menu的类,这个类用dll和exe编译。我有另一个名为ChildMenu的类继承自Menu,这个类也用dll和exe编译。

我在dll中有一个函数创建ChildMenu并将其作为Menu返回。

extern "C"
{
   Menu* createMenu();
}

并实施

Menu* createMenu()
{
    return new ChildMenu();
}

当我在dll中更改ChildMenu类的行为并重新编译它而不是在exe中时,类的行为不会更改,直到我在exe中更改类的行为并重新编译它。

ChildMenu覆盖了Menu方法之一。在重写方法中发生了行为更改。

我在dll中创建了ChildClass,但它的行为来自exe类。

为什么会这样?

c++ dll shared-libraries
1个回答
0
投票

问题是在gcc中默认导出共享库中的符号。我通过隐藏类的可见性来解决问题;

© www.soinside.com 2019 - 2024. All rights reserved.