c++ - __declspec(dllimport/dllexport) 和继承

标签 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();
};

即使“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/

相关文章:

c++ - 神秘的全局变量 - COM/STA 单元对象

python - os.path.abspath的一个 super 奇怪的bug

c++ - 尝试使用取消引用的迭代器进行连接时,无法在字符串 vector 中连接字符串

c++ - 使用特化测试类中值的存在

c++ - 会使用 goto 泄漏变量吗?

c++ - 如何获取软件版本?

windows - 如何在 cygwin 中启动 Windows GUI 程序?

C# Pinvoke 并重新加载 DLL

C# 编码(C# 调用 C++ DLL)

c++ - 在 unordered_map 中搜索的最佳实践