给定具有以下类的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/