给定一个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即得。

请注意过那类成员默认为私有可访问性,所以没有你的方法应该是可访问的。但是,我看到基地:: B()被出口在我的测试。在C ++中使用DLL的代码将标记错误头,但我不知道,如果你调整了头在那里,如果你能欺骗它。

无论如何,如果你没有实例化DLL中派生的(通过另一个入口点),虚拟表应该仍然可以工作,所以如果你做的事:

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

你会调用派生:: B()。

其他提示

可以通过键入从Visual Studio命令壳找出

link /dump /exports <yourdll>

如果他们出口,你会看到的功能“修饰的名”。看看他们是人类可读的格式是什么,复制粘贴一个做

undname <decorated name>

没有,导出将不会是DLL的可见的外侧。为了导出派生类,你就必须在DLLAPI宏适用于派生类为好。

您必须使两者的基类和派生类导出,

http://msdn.microsoft.com/en-us/library/ 81h27t8c.aspx

All base classes of an exportable class must be exportable. If not, a compiler 
warning is generated.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top