标准c导出十分简单,无需再提。
然而关于c++导出,当我们导出类时,一个类除了构造和析构函数还会导出拷贝函数,并且会将类中的所有函数一一导出,且符号为带修饰符的符号名
但是由于c++导出修饰符号的规则各有不同,因此需要保证dll编程和使用者使用相同的编译器。这显示是很不通用的办法。
更好的办法是我们的.h仅声明纯虚函数,而dll实现的派生类仅导出一个获取派生类对象的方法。这样由于c++的虚函数机制是一致的,我们仅需从其实现dll获取该实现的对象,即可调用函数,且该办法在编译后函数的调用几乎是匿名的(仅得到对象获取地址),增加封装性。
其实这便是com的雏形,将接口和实现分离,实现高度的解耦性,使用者无需知道其实现,只需要知道接口的功能即可使用。
顺带在这里说一下,在实现C++多态时,当使用 Csupper* pclass=new Cson();
进行delete时是无法调用到子类的析构函数的,当子类析构 存在释放资源时候即会发生泄露。解决办法为将析构函数改为虚函数,这样即可实现。
详情请见该博主的一份详解:
DLL导出C++类