在DLL中封装模板类的问题

在Dll中封装类是用定义一个宏来区分导出标识的
#ifdef DLLCLASS_EXPORTS
#define DLL_CLASS				_declspec(dllexport)  //Dll
#else
#define DLL_CLASS				_declspec(dllimport)   //使用者
#endif

  

在类的声明时在Class 和类名之间加上DLL_CLASS就能导出类了

class DLL_CLASS QWnd

{

  //....
};

 

但是今天我想封装一个模板类就不行了

//模板链表类
template <class  T>
class DLL_CLASS QList
{
    //...
};

就出现编译错误

 

后来在网上查询后才知道,模板类在使用者调用的时候不能用导出宏,所以修改宏定义为:

#ifdef DLLCLASS_EXPORTS
#define DLL_CLASS                _declspec(dllexport)  //Dll
#define DLL_TEMPLATE_CLASS        _declspec(dllexport)    //模板类的导出
#else
#define DLL_CLASS                _declspec(dllimport)   //使用者
#define DLL_TEMPLATE_CLASS  
#endif

模板类就用DLL_TEMPLATE_CLASS 宏来导出类,其他类用DLL_CLASS宏

//模板链表类
template <class  T>
class DLL_TEMPLATE_CLASS QList
{
    //...
};

 

posted @ 2023-03-16 18:52  初吻给了烟灬  阅读(69)  评论(0编辑  收藏  举报