__declspec(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()” 函数以可见?
由于
解决方案
类派生不会被你的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.
不隶属于 StackOverflow