给定一个包含以下类的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()“函数对可见吗?
谢谢
发布于 2009-08-12 18:26:33
您的DLL不会导出派生的类。类不继承导出。将DLLAPI也添加到其中。
还要注意的是,类成员默认为私有可访问性,因此您的任何方法都不应该是可访问的。但是,我确实看到Base::B()在我的测试中被导出。使用DLL的代码中的C++头将标记错误,但我想知道您是否在那里调整了头,如果您能欺骗它。
无论如何,如果您确实在DLL中实例化了一个派生的(通过另一个入口点),虚拟表应该仍然可以工作,所以如果您这样做了:
Base* b = getTheDerived(); b->B();您将调用Derived::B()。
发布于 2009-08-12 18:20:12
您可以通过输入以下命令从Visual Studio命令shell中找到答案
link /dump /exports <yourdll>如果它们被导出,您将看到函数的“修饰名称”。要以人类可读的格式查看它们是什么,请复制粘贴一个,然后执行
undname <decorated name>发布于 2009-08-12 18:23:03
否,派生将在DLL之外不可见。为了导出派生类,还必须将DLLAPI宏应用于派生类。
https://stackoverflow.com/questions/1267811
复制相似问题