1- 插件导出函数设计成C形式的也就是在函数前加 extern "C",这样保证动态连接的时候不会出现找不到名字的情况.
2- 一定要保证代码绝缘,中间接口一定要传递NATURAL类型或者纯虚指针,否则会因为一些细微的类版本不同而导致很多很多的运行错误和异常.
NATURAL就是编译器支持的原子类型 char, int, long, short, 这些以及他们的无符号版本版本 纯虚指针,就是纯虚函数指针, 比如在插件和主程序的参数传递中使用下面这种纯虚类的指针
class CPureVirtualParam
{
public:
virtual char * GetName() = 0;
virtual int GetAge() = 0;
};
3- DLL中分配出来的内存,一定要在DLL内部释放,否则会导致意想不到的情况.
4- 如果不是万分必要不要使用DLL直接导出类,而应该导出纯虚接口.不然使用DEPENDENCE等工具会把你的类结构看的一清二楚. 导出成员函数是可以的, 纯虚函数也是可以的, 但是似乎是没有什么作用. 一般我都是为导出类写纯虚接口类.
5- 如非必要,请一定要使用动态连接,也就是LOADLIBRARY, GETPROCADDR的形式,这会增强你软件的友好性.
6- 如果你要提供对象工厂,那么确保你的对象的纯虚接口要有 virtual ~InterfaceClassName(){} 这样的析构函数, 确保在你混乱不堪直接去删除一个接口指针的时候能正确的调用到接口实现的析构.
7-如果是针对C++客户, 那么采用boost::shared_ptr可以大大减轻内存的管理, 不容易产生内存泄露, 也不会有跨模块释放内存的情况.