__declspec(dllimport/dllexport)和继承

Nic*_*las 5 c++ windows dll dllimport dllexport

给定具有以下类的DLL:

#define DLLAPI __declspec(...)

class DLLAPI Base
{
    public:
    virtual void B();
};

class Derived : public Base
{
    public:
    virtual void B();
    virtual void D();
};
Run Code Online (Sandbox Code Playgroud)

即使"DLLAPI"关键字未应用于类定义(至少,不是直接),我的"Derived"类是否可以在dll之外显示?

"D()"功能是否可见?

谢谢

Pet*_*ona 5

您的 DLL 不会导出类 Derived。类不继承导出。也将 DLLAPI 添加到其中。

另请注意,类成员默认为私有可访问性,因此您的任何方法都不应可访问。但是,我确实看到 Base::B() 在我的测试中被导出。使用 DLL 的代码中的 C++ 标头会标记错误,但我想知道您是否在那里调整了标头,是否可以欺骗它。

无论如何,如果你在你的 DLL 中实例化了一个 Derived(通过另一个入口点),虚拟表应该仍然可以工作,所以如果你这样做了:

Base* b = getTheDerived(); b->B();
Run Code Online (Sandbox Code Playgroud)

你会调用 Derived::B()。