DLL导出实例化的模板类
2009-02-24 15:57
218 查看
因为模板是在编译的时候根据模板参数实例化的,实例化之后就像一个普通的类(函数),这样才有对应的二进制代码;否则,没有模板参数,那么编译器就不知道怎么生成代码,所以生成的DLL就没有办法导出模板了. 但是根据MSDN的描述,可以导出模板类的实例化后的代码(注意:这里不是指实例化模板类的一个对象), 比如 template<typename T> class singleton,那么可以导出singleton<MyClass>或者其他已知类型的类代码. 详见: http://support.microsoft.com/kb/168958/en-us.这个例子比较老,竟然是VC5的代码,不过我试了一下,在VC8下可以导出,不过要将exe文件中的extern声明去掉.否则不能通过. 关键语句: #ifdef EXP_STL # define DECLSPECIFIER __declspec(dllexport) #else # define DECLSPECIFIER __declspec(dllimport) #endif 分别在EXE和DLL中使用这个声明: template class DECLSPECIFIER TEMPLATE<TYPE>; 就可以导出一个TYPE实例的TEMPLATE类代码. MSDN上说,从一个实例化模板类集成过来的DLL导出类,就不用再声明了,好像因为在声明这个类的时候编译器已经知道了: class DECLSPECIFIER myInterface : public singleton<myInterface>{} class DECLSPECIFIER myInterface : public std::vector<short*>{} 这种方法直接就可以导出了,而且好像有些情况也里也不用去管C4251(http://msdn.microsoft.com/en-us/library/esew7y1w.aspx)的编译警告... |
相关文章推荐
- [百度空间] [原]DLL导出实例化的模板类
- VS编译器从DLL导出模板类
- 一个获取dll导出函数的模板类
- vc 的dll可以导出模板类的具体子类,但是这个模板类中不能用static变量
- DLL导出STL模板类和成员变量
- DLL中导出STL模板类的问题
- 在dll中导出模板类的方法
- DLL导出STL模板类和成员变量
- 模板类和模板函数在dll导出
- 最简单DLL导出加载示例
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- dll导入导出资源文件查看工具 InspectExe
- dll 导出函数名的那些事
- 深入浅出Dll(介绍函数导出、类导出、钓子dll、不同语言混合编程方法、插件等的实现方法)
- VC中创建DLL,导出全局变量,函数和类
- 导出DLLRegisterServer接口遇到的问题
- VC程序运行时导出资源、DLL、EXE
- DLL 的编写,引用,导出 .
- 怎样从一个DLL中导出一个C++类
- 动态加载dll的导出函数的问题