看了网上解答,加了这么一句
//template class __declspec(dllexport) ATL::CWindowImpl<QWindow, CWindow, CWinTraits<Q_WS_WINDOW>>;
还是不行啊

解决方案 »

  1.   

    我看没法实现 ATL::CWindow本身不是导出类 你的类继承自它却想导出 除非你在导出类的。h里提供CWindow的全部代码
      

  2.   

    我这样写对吗?
    class __declspec(dllexport) ATL::CWindow;
    template class __declspec(dllexport) ATL::CWinTraits<Q_WS_WINDOW>;
    template class __declspec(dllexport) ATL::CWindowImpl<QWindow, CWindow, CWinTraits<Q_WS_WINDOW>>;
    分别导出这些类
      

  3.   

    模板是在模块内部使用的,不能跨越模块边界,有大量原因使模板类不能导出,几句话说不清楚,记得这条规则就行了。
    你见过有哪个库有导出过模板吗?包括系统的API。不仅仅不能导出模板类,普通导出函数(包括导出类的方法)的参数和返回值类型都不能跟模板类型有任何关联,即使是模板类的派生类型也不行,只能使用简单的数据类型,你必须想办法使用简单类型代替你的想法。例如,CWindow、CWindowImpl等等类其实都是对窗口句柄HWND的封装,你只需在导出函数中使用HWND类型即可,它只是一个普通的整数类型,导出没有任何问题,HWND传递到模块内部后,可以使用CWindow之类的封装类重新接管HWND操作即可。