关于在dll中传递vector的问题

skyab2007 2008-11-28 01:47:38
外部应用程序向dll传递vector <UINT32> test;
dll里面声明的是引用
外部程序传递一个空的,带出dll里面的赋予的值,这一步出现内存错误了,调试可以发现,运行程序没问题

dll能用vector传递吗?引用传递
如果能传递,请问该如何传递......请高手们不吝赐教
...全文
281 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2008-11-28
  • 打赏
  • 举报
回复
http://www.bokebb.com/dev/english/1961/posts/196159506.shtml
vcPlayer 2008-11-28
  • 打赏
  • 举报
回复
跨模块使用STL是很危险的!
如果没得改,最好在外部先给该变量分配空间(resize),再传递到DLL内部填充数据。不过最好用基本类型。
oyljerry 2008-11-28
  • 打赏
  • 举报
回复
可以用一个LPVOID*指针,然后再转换回vector使用
songsu 2008-11-28
  • 打赏
  • 举报
回复
小广告,技术交流群:6259765
讨论范围不限:分布式系统构架,服务器集群,客户端开发,图形图像。
thenshesaid 2008-11-28
  • 打赏
  • 举报
回复

// Dll
extern "C" void _declspec(dllexport) passVectorByRef (vector <UINT> &vec)
{
vec.reserve (5);
vec.assign (5, 1);
}
// EXE
extern "C" void _declspec(dllexport) passVectorByRef (vector <UINT> &vec);

int main ()
{
vector <UINT> vec;
passVectorByRef (vec);

for (int i = 0; i < vec.size (); ++ i)
printf ("%d", vec[i]);
return 0;
}


测试通过,注意在Project->c/c++->Code Generation中,Runtime Library选择同样的DLL形式的CRT。
因为vector会在堆上有内存操作,所以各个模块最好使用同一个堆。
cnzdgs 2008-11-28
  • 打赏
  • 举报
回复
因为vector的插入和删除需要动态分配和释放内存,不同模块之间这样操作是不安全的,所以Debug版中会对这种操作进行检查,如果发现则报错。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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