当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>如安在Dll中导出STL类</b>[VC/C++编程]

赞助商链接



  本文“<b>如安在Dll中导出STL类</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

简介:本文详述在DLL中导出stl类及包含stl的类的办法.例子源码

Dll无法直接导出泛型模板(generalized template),因此,假如要导出stl类,则模板必须先实例化(instantiated).别的,假如导出的STL类利用了其他STL类,那么这些其他类必须同时被导出.目前stl中唯一可以被导出的容器是vector,其他容器(如map、set、queue、list、deque)都因包含嵌套类而不能被导出.

导出STL类的步骤:

在Dll和exe文件中,用一样版本的c运行库链接.比方都用Msvcrt.lib(release)链接或都用Msvcrtd.lib(debug)链接.

Dll中,用__declspec(dllexport)导出模板类的实例.

在exe文件中,用__declspec(dllimport)和extern关键字从Dll中导入 stl类.

需求注意的是:当导出一个以自定义类为模板参数的stl容器,必须为这个自定义范例定义<和==运算符.比方,假如要导出std::vector<CPerson>类,则必须为CPerson增添<和==运算符.以下: //导出stl类 std::vector<CPerson>
class CPerson
{
public:
  int m_nAge;
  char m_strName[40];
public:
  bool operator < (const CPerson& c) const
  {
    return true;
  }
  bool operator == (const CPerson& c) const
  {
    return true;
  }
};
EXPIMP_TEMPLATE template class VECDLL_API std::vector<CPerson> //显示实例化模板类
VECDLL_API int fnVecDll(std::vector<CPerson>& vecPer); //导出函数

定义这两个运算符的缘由是:全部stl容器都有“对比”成员函数,这些成员函数需求调用自定义范例的<和==运算符.普通情形下,由于没有利用这些成员函数,所以它们没有被实例化,所以我们利用时普通就不需求为CPerson定义这两个运算符.但是,当显示实例化此容器类时,它全部的成员函数都需实例化,包含它的“对比”成员函数,所以这时必须实现CPerson的<和==运算符.假如CPerson并不在乎<和==的意义,我们可以像上面代码所示通过简单返回true来实现它们.

导出一个“数据成员包含stl对象”的类.办法与上近似.以下代码所示:

EXPIMP_TEMPLATE template class VECDLL_API std::vector<int>  //显示实例化std::vector<int>
class VECDLL_API CContainer
{
public:
  std::vector<int> m_vecNum;
};

完好例子请查看实例代码.

本文配套源码


  以上是“<b>如安在Dll中导出STL类</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .