读书人

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

发布时间: 2012-01-29 21:39:32 作者: rapoo

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可以。其它的容器都是嵌套定义的。我不知道其它的普—LL是不是也是一样的。你可以参考一下MSDN的技术文档033。上面有关于MFC扩展DLL的解决方法,看是否对你有所帮助。

读书人网 >VC/MFC

热点推荐