STL类导出问题

梧桐168 2009-01-07 10:34:21
有个库想封装成dll,但是导出的类包含STL的类型变量,结果在release版本下编译出现不少 warning
warning C4251: 'value' : class 'std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' needs to have dll-interface to be used by clients of class 'TiXmlNode'
...

是不是所有导出类的成员类型都必须是导出类型,资料里说目前stl中唯一能够被导出的容器是vector。
这样的话岂不是导出类里不能使用STL作为成员变量。
...全文
162 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2009-01-07
  • 打赏
  • 举报
回复
vector是能导出的,没问题!

至于其他的stl容器,没试过!不敢妄言!
星羽 2009-01-07
  • 打赏
  • 举报
回复

不要导出类,更不要导出stl的东西

都用接口吧


struct IObj
{
virtual size_t GetDataCount() = 0;
virtual int GetData(size_t index) = 0;
};

struct Obj : public IObj
{
virtual size_t GetDataCount() { return m_vData.size(); }
virtual int GetData(size_t index) { return m_vData[index]; }

private :
vector<int> m_vData;
};

_declspec(dllexport) IObj* CreateObj()
{
return new Obj;
}

int main()
{
IObj* pObj = CreateObj();

for (size_t i = 0; i < pObj->GetDataCount(); ++i)
{
int data = pObj->GetData(i);
}

return 0;
}
帅得不敢出门 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
珍惜生命,远离“扩展dll”,只使用纯C接口的标准dll。
[/Quote]
taodm 2009-01-07
  • 打赏
  • 举报
回复
珍惜生命,远离“扩展dll”,只使用纯C接口的标准dll。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧