给定一个包含以下类的 DLL:
#define DLLAPI __declspec(...)
class DLLAPI Base
{
public:
virtual void B();
};
class Derived : public Base
{
public:
virtual void B();
virtual void D();
};
即使“DLLAPI”关键字未应用于类定义(至少,不是直接),我的“派生”类是否在 dll 外部可见?
“D()”函数是否可见?
谢谢
最佳答案
Derived 类不会被您的 DLL 导出。类不继承导出。也将 DLLAPI 添加到其中。
另请注意,类成员默认为私有(private)可访问性,因此您的任何方法都不应可访问。但是,我确实看到 Base::B() 在我的测试中被导出。使用 DLL 的代码中的 C++ header 会标记错误,但我想知道您是否调整了那里的 header ,是否可以欺骗它。
无论如何,如果您确实在 DLL 中实例化了一个 Derived(通过另一个入口点),虚拟表应该仍然有效,所以如果您这样做了:
Base* b = getTheDerived(); b->B();
您将调用 Derived::B()。
关于c++ - __declspec(dllimport/dllexport) 和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267811/