社区
C++ 语言
帖子详情
STL高手进
newish21
2008-02-21 04:51:42
我现在有一个dll ,里面有个函数如下:
void Set(vector<int >*v)
{
v->push_back(1);
v->push_back(2);
//...PUSH 很多数据
}
现在客户端调用如下:
vector<int> v ;
c.Set(&v);
会出现错误,请高手指点.(主要就是内存问题)
...全文
166
5
打赏
收藏
STL高手进
我现在有一个dll ,里面有个函数如下: void Set(vector*v) { v->push_back(1); v->push_back(2); //...PUSH 很多数据 } 现在客户端调用如下: vector v ; c.Set(&v); 会出现错误,请高手指点.(主要就是内存问题)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liyuzhu_1984
2008-02-21
打赏
举报
回复
void Set(vector <int > &v) /* 这里把指针改成引用你看行不行
{
v-> push_back(1);
v-> push_back(2);
//...PUSH 很多数据
}
rabbit729
2008-02-21
打赏
举报
回复
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;
};
边城狂人
2008-02-21
打赏
举报
回复
据说Microsoft的STL用在DLL中的时候是容易出问题了。没仔细研究,你可以用Google搜索一下。
taodm
2008-02-21
打赏
举报
回复
珍惜生命,远离扩展dll。只使用纯C接口。
珍惜生命远离CPP
2008-02-21
打赏
举报
回复
stl不能用在dll接口中
C++
高手
之
STL
学习资料
STL
:Standard Template Library C++
高手
之
STL
想成为
高手
的人赶快下载,这是官方提供的正规例程资料,可供学习之用!
STL
模板库介绍,让你开始向编程
高手
靠近
让你明白容器与迭代器的概念,让你开始懂得
STL
模板库的基本算法
STL
高级编程(
高手
必备)
STL
高级编程,
STL
编程
高手
必备书籍
三十分钟掌握
STL
简单讲解
STL
,这本书原名是《using
stl
》,
高手
将之翻译为中文,我是借阅!
VC
STL
运用应源码 vector 、list、map dos员工管理系统
欢迎加入群(VC编程
高手
160037036)探讨==dos版大学人员管理系统
STL
的运用,欢迎大家下载,尤其是想运用
stl
的,只要30分钟让你搞定
STL
STL
是vc编程必不可少的,应用合集,纵向比较
C++ 语言
65,206
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章