首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

DLL导出类中有STL数据成员的有关问题?

2012-01-29 
DLL导出类中有STL数据成员的问题???//想将A导出为DLL,代码如下://///////////////////dll////////////////

DLL导出类中有STL数据成员的问题???
//想将A导出为DLL,代码如下:
///////////////////      
//       dll      
///////////////////      
#include   "DB.h "
#include   <stack>
#include   <iostream>
using   namespace   std;
#ifdef   DLL_FILE
class   _declspec(dllexport)   A   //导出类A
#else
class   _declspec(dllimport)   A   //导入类A
#endif  
{
public:
    ...     //   一些成员函数声明
private:
        stack <DB>   Opnd;     //   DB为一个类     (39)
        stack <char>   Optr;     //   (40)
        string   str;                 //   (41)
};
编译会出现下面的错误:
e:\vc   projects\testAdll\A.h(39)   :   warning   C4251:   'Opnd '   :   class   'std::stack <class   DBigInt,class   std::deque <class   DBigInt,class   std::allocator <class   DBigInt>   >   > '   needs   to   have   dll-interface   to  
be   used   by   clients   of   class   'expression '
e:\vc   projects\testAdll\A.h(40)   :   warning   C4251:   'Optr '   :   class   'std::stack <char,class   std::deque <char,class   std::allocator <char>   >   > '   needs   to   have   dll-interface   to   be   used   by   clients   of   class
  'expression '
e:\vc   projects\testAdll\A.h(41)   :   warning   C4251:   'str '   :   class   'std::basic_string <char,struct   std::char_traits <char> ,class   std::allocator <char>   > '   needs   to   have   dll-interface   to   be   used   by   c
lients   of   class   'expression '
Linking...
testADLL.exe   -   0   error(s),   3   warning(s)
//使用这个dll   的主函数
////////////////////      
//       exe      
////////////////////      
    int       main(int       argc,       _TCHAR*       argv[])      
    {      
        A   a;      
      cout < <a.Calculate() < <endl;
      return       0;      
    }          
  上面那三个警告我也在网上查了相关资料,现在也不知道要导出STL   数据成员该如何处理??
      最重要的是退出的时候会报错,但是执行的结果是正确,结果输出后,就出现一个对话框提示“
Debug   Assertion   Failed!.... "     如何解决??     非常感谢!

[解决办法]
再多使用一个类如
Aimpl这个类完成A类的功能,
然后A类中包含Aimpl的指针,A类做转发,在cpp中包含这个类,这样A.h中就只有简单的一些数据声明了。
导出就没这么多问题了
[解决办法]
沒有關係的.
可以不理,,如看不順眼你可以把這個警告禁用掉.
[解决办法]
http://www.99power.com/wz_103212/
------解决方案--------------------


我做过一个MFC扩展DLL,其中也需导出包含STL容器的类。MSDN上的说法是包含STL成员的类是不能直接导出的,只有VECTOR可以。其它的容器都是嵌套定义的。我不知道其它的普通DLL是不是也是一样的。你可以参考一下MSDN的技术文档033。上面有关于MFC扩展DLL的解决方法,看是否对你有所帮助。

热点排行