在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
{
//...
};

在DLL中封装模板类的问题的更多相关文章

  1. C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?

    C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译? 这个feature叫做Export Template,即外名模板,它的作用在于使得模板代码可依照C/C++语言习惯,将模板声明和实现 ...

  2. [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

      这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...

  3. 在DLL中封装的VCL窗体Tab键响应的问题

    在DLL中的子窗体不会响应Tab按键的,这个时候就需要手动去指定Tab键的操作,但是前提是主窗体要向这个窗体发送一个消息,一个Tab键按下的消息.基本顺序是这样的: 1. 主窗体用Hook技术捕获Ta ...

  4. 如何在MFC DLL中向C#类发送消息

    如何在MFC DLL中向C#类发送消息 一. 引言 由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在 ...

  5. PHPEXCEL在thinkphp中封装成类使用

    PHPEXCEL在thinkphp中封装成类使用 标签: phpexcel导出导入thinkphp -- : 435人阅读 评论() 收藏 举报 分类: php() 版权声明:本文为博主原创文章,未经 ...

  6. C++头文件中的模板类

    C++头文件中的模板类 这已经是我的第三篇关于头文件的博客了,没想到我还是踩了个巨坑. 大家都知道要在头文件里声明类成员,在源文件中实现. 但是今天写数据结构作业,在头文件(Stack.h)定义了一个 ...

  7. Win32 DLL和MFC DLL 中封装对话框

    现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32   DLL和MFC   DLL两个方面来分析并解决这个问题.     ...

  8. 如何调用DLL中的导出类

    之前在网上一直查不到关于把类打包成dll文件的程序,今天自己写了个测试程序,供大家参考 一.生成类的dll文件 1.我是在vs2008上测试的,建立工程,在选择建立何种类型的工程的时候,勾上appli ...

  9. C++ Dll中导出一个类

    //定义一个头文件,创建MyObject.h的头文件 并打印如下代码 #ifndef _MY_OBJECT_H #define _MY_OBJECT_H #ifndef MYDLL_EXPORTS # ...

  10. 怎样从一个DLL中导出一个C++类

    原文作者:Alex Blekhman    翻译:朱金灿 原文来源: http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx 译 ...

随机推荐

  1. Fake权限验证小例子

    前言 关于本地测试如何进行Fake权限验证 正文 在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验 ...

  2. CANoe创建仿真工程

    在现代汽车工业中,车载测试是确保车辆电子系统可靠性和功能性的关键环节.而使用CANoe创建仿真工程,不仅能够模拟真实的车辆环境,还能大大提升测试效率和准确性.那么,CANoe是如何实现这些的呢? 车载 ...

  3. test20230824总结

    A 怎么是重构树板子,放在图上都是水题. B 考场上只打了一个暴力,赛后发现似乎是很可做的 C 是一个考察状态设计的 dp 以后要多刷 D 是一道数据结构优化 dp 考场上写出来了却因为空间问题挂了 ...

  4. rem适配布局

    没有一张图解决不了的事 https://www.processon.com/mindmap/5e3a589be4b021dc2899f511 <link rel="stylesheet ...

  5. MongoDB安装、基础操作和聚合实例详解

    虽然MongoDB这些年很流行,但笔者之前没研究过,现在有需求研究这类NoSQL的数据库,是为了验证其是否可被替换. MongoDB是很轻量的文档数据库,简单测试也懒得专门准备虚拟机环境了,直接在ma ...

  6. CM3调试系统简析

    CM3 调试系统简析 **"一直以来,单片机的调试一直不是很突出的主题,很多简单些的程序在开发中,甚至都没有调试的概念,而只是把生成的映像直接烧入片子,再根据错误症状来判断问题,然后修改程序 ...

  7. [oeasy]python0135_变量名与下划线_dunder_声明与赋值

    变量定义 回忆上次内容 变量 就是 能变的量 上次研究了 变量标识符的 规则 第一个字符 应该是 字母或下划线 合法的标识符可以包括 大小写字母 数字 下划线     还研究了字符串(str)的函数 ...

  8. C语言基础要点

    C语言基础 C语言基础 C程序编译过程 C程序编译步骤 汇编语言 32关键字 数据类型 常量 size程序 类型限定 goto语句 指针 指针和字符串 作用域 函数 内存 进程内存结构 可执行文件结构 ...

  9. SMU Summer 2024 Contest Round 1(7.8)zhaosang

    A-A http://162.14.124.219/contest/1005/problem/A 一道数学问题,求概率. 要求成功的概率,有两个色子, 一个用来抛正反面,一个用来控制得分大小,当超过某 ...

  10. ComfyUI进阶:Comfyroll插件 (六)

    ComfyUI进阶:Comfyroll插件 (六) 前言: 学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业 ...