给定具有以下类的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()”函数?

谢谢

最佳答案

派生类不会由您的DLL导出。类不继承导出。也添加DLLAPI。

还要注意,类成员默认为私有(private)可访问性,因此您的任何方法均不可访问。但是,我确实看到在测试中导出了Base::B()。使用DLL的代码中的C++头文件将标记该错误,但是我想知道是否在此处对头文件进行了调整,如果可以将其蒙蔽。

无论如何,如果您确实在DLL中实例化了Derived(通过另一个入口点),则虚拟表仍将正常工作,因此,如果您这样做:

Base* b = getTheDerived(); b->B();

您将调用Derived::B()。

关于c++ - __declspec(dllimport/dllexport)和继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1267811/

10-13 02:38