社区
进程/线程/DLL
帖子详情
调用其他DLL时传递vector和string的问题
zxt6405
2011-09-26 01:26:17
我的程序主模块在调用其他DLL的函数的时候,以引用的方式传递了参数,参数的类型vector<string>。
在DLL中程序对这个vector<string>类型的参数进行了处理。
然后在主模块中析构这个经过处理的vector<string>类型的变量的时候,主程序报堆损坏的错误。
我看到有些说法是跨模块传递的时候尽量不要用C++的类,尽量用C的风格,是这样么?
...全文
1484
12
打赏
收藏
调用其他DLL时传递vector和string的问题
我的程序主模块在调用其他DLL的函数的时候,以引用的方式传递了参数,参数的类型vector。 在DLL中程序对这个vector类型的参数进行了处理。 然后在主模块中析构这个经过处理的vector类型的变量的时候,主程序报堆损坏的错误。 我看到有些说法是跨模块传递的时候尽量不要用C++的类,尽量用C的风格,是这样么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zxt6405
2011-09-28
打赏
举报
回复
[Quote=引用 9 楼 caddor2011 的回复:]
你的意思是: 因为你手动释放了vector导致的?
还是你没有多次释放,就会崩溃?
这么一说,我心虚了 ,我以前写过的dll,就用了vector, 怎么没有发现这个问题
引用 6 楼 zxt6405 的回复:
引用 4 楼 caddor2011 的回复:
vector没有深究, 但是它有自动释放的功能吧
你再再主模块释放,,你说后果会怎样?
……
[/Quote]
我这个vector是自动释放的。
我的这个vector不是new出来在堆上申请内存的那种,而是在栈上申请内存的。在离开这个函数的时候会自动释放这个vector。
我出现问题是在模块间调用函数时,参数用了Vector所致,也许你只是在dll内部使用了vector……
zxt6405
2011-09-28
打赏
举报
回复
[Quote=引用 8 楼 ugly927846 的回复:]
传递标准的类型,呵呵IDE还没有这么智能知道你要用于dll。
[/Quote]
这个……
这个应该是编译器的问题吧……
好想和IDE关系不是很大啊……
oyljerry
2011-09-28
打赏
举报
回复
[Quote=引用 3 楼 zxt6405 的回复:]
哦,谢谢。
另外关于这个问题,有没有一些比较详细的资料或者书籍提到过这个问题。或者说应该用什么关键字去在MSDN等地方查找这种问题的答案。
我想知道更详细一些的原理。
另外,感觉这种问题有点像是VC的bug,没有对C++的STL的一些功能提供很好的支持,可以这么认为么?
[/Quote]
http://stackoverflow.com/questions/1763739/problem-retuning-a-vector-from-a-c-dll-to-another-c-exe
jamseyang
2011-09-27
打赏
举报
回复
DLL不是C++专用的,你在输出函数中使用Vector、引用,那么C、VB、Delphi怎么调用呢?
所以还是使用标准数据类型吧!
caddor2011
2011-09-27
打赏
举报
回复
vector没有深究, 但是它有自动释放的功能吧
你再再主模块释放,,你说后果会怎样?
[Quote=引用楼主 zxt6405 的回复:]
我的程序主模块在调用其他DLL的函数的时候,以引用的方式传递了参数,参数的类型vector<string>。
在DLL中程序对这个vector<string>类型的参数进行了处理。
然后在主模块中析构这个经过处理的vector<string>类型的变量的时候,主程序报堆损坏的错误。
我看到有些说法是跨模块传递的时候尽量不要用C++的类,尽量用C的风格,是这样么?
[/Quote]
caddor2011
2011-09-27
打赏
举报
回复
你的意思是: 因为你手动释放了vector导致的?
还是你没有多次释放,就会崩溃?
这么一说,我心虚了 ,我以前写过的dll,就用了vector, 怎么没有发现这个问题
[Quote=引用 6 楼 zxt6405 的回复:]
引用 4 楼 caddor2011 的回复:
vector没有深究, 但是它有自动释放的功能吧
你再再主模块释放,,你说后果会怎样?
引用楼主 zxt6405 的回复:
我的程序主模块在调用其他DLL的函数的时候,以引用的方式传递了参数,参数的类型vector<string>。
在DLL中程序对这个vector<string>类型的参数进行了处理。
然后在主模块中析构……
[/Quote]
欣客
2011-09-27
打赏
举报
回复
传递标准的类型,呵呵IDE还没有这么智能知道你要用于dll。
zxt6405
2011-09-27
打赏
举报
回复
[Quote=引用 5 楼 jamseyang 的回复:]
DLL不是C++专用的,你在输出函数中使用Vector、引用,那么C、VB、Delphi怎么调用呢?
所以还是使用标准数据类型吧!
[/Quote]
说的有理。
但是我觉得应该有相关提示警告一下我们这些编码人员,使用标准数据类型。
我没找到这些警告……
zxt6405
2011-09-27
打赏
举报
回复
[Quote=引用 4 楼 caddor2011 的回复:]
vector没有深究, 但是它有自动释放的功能吧
你再再主模块释放,,你说后果会怎样?
引用楼主 zxt6405 的回复:
我的程序主模块在调用其他DLL的函数的时候,以引用的方式传递了参数,参数的类型vector<string>。
在DLL中程序对这个vector<string>类型的参数进行了处理。
然后在主模块中析构这个经过处理的vector<string>类型的变……
[/Quote]
程序会崩溃,而且崩溃的地方就是在它自动释放的时候。
崩溃的直接原因是堆损坏,就是释放的时候出了问题。
不仅仅是vector,list我也试过,结果一样。
zxt6405
2011-09-26
打赏
举报
回复
哦,谢谢。
另外关于这个问题,有没有一些比较详细的资料或者书籍提到过这个问题。或者说应该用什么关键字去在MSDN等地方查找这种问题的答案。
我想知道更详细一些的原理。
另外,感觉这种问题有点像是VC的bug,没有对C++的STL的一些功能提供很好的支持,可以这么认为么?
morebread
2011-09-26
打赏
举报
回复
是的。我现在写的一个dll模块在最初的时候传递的参数也是一个vector的引用。后来在使用的过程中释放这个vector的资源出错。
现在改为传递一个vector的空指针,dll内部分配和释放空间,就没问题了
oyljerry
2011-09-26
打赏
举报
回复
嗯,一般跨模块尤其作为参数,最好用一些标准数据类型,你的vector,string等都会有自动内存分配释放等处理,跨模块容易有一些问题.
Windows进程常用
DLL
模块注入技术
课程结合多种Windows进程常用
DLL
注入技术。远程线程注入APC注入,异步
调用
过程,向目标线程插入待执行任务从而完成注入。窗口消息注入,指定窗口进程注入,与全局钩子注入类似。环境块注入,获取进程上下文信息,直接性修改程序执行流程完成注入。进程入口点注入,在程序初始化的
时
机前将
dll
模块文件注入至目标主线程。进程调试级注入,涉及调试器相关功能
调用
知识点
dll
模块重定位内存注入,模拟操作系统加载PE文件方式,直接将
dll
文件内存数据写入目标进程并执行。导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入表、增加导出函数,修复表项数据等。内核驱动级
Dll
模块注入技术,内核驱动入门扩展。
跨
DLL
传递
std::
string
今天又碰到
传递
std::
string
参数给另外一个
DLL
中的函数, 并从该函数中返回std::
string
的
问题
。参数
传递
进去后就不对了,返回值也不对(是空)。网上查了查,大致说,不要在
DLL
间
传递
STL数据类型,包括std::
string
,以及MFC C
String
。 但是
传递
char * 也太繁琐了点。目前不知有什么好办法。 见下面的文章:
调用
其他
DLL
时
传递
vector
和st...
C++中
vector
string
跨
DLL
失败,MSVC低版本调高版本生成
DLL
1,
问题
问题
一: 在一个MFC应用程序exe中,
调用
另一个
DLL
中的函数,函数中的一个形参是
string
类型的,每次
调用
都会出现乱码或者NULL的情况
调用
前:
调用
后: 以STL通过修改编译选项验证了这个
问题
。
string
在exe赋值的
时
候需要释放掉原来的内存空间,然后在
DLL
再申请新的内存空间,所以看到是NULL 注意,假如换成
string
对象赋值 std::
string
s = "getRouterRtpCapabilities"; send(s, body, pro
vector
作为参数
传递
到
dll
问题
最近的一个项目中遇到了
调用
别人的sdk接口(
dll
库)而传给我的是一个
vector
指针,用完之后还要我来删除的情况。这个过程中首先就是在我的exe中将其
vector
指针转为相应指针再获取
vector
中相应的数据
问题
,始终都获得不了正确的数据,要么就是一些非法的数据;另一个
问题
就是delete这个指针
时
候会产生相应异常(针对这个
问题
的思考:如果EXE和
DLL
都链接到
DLL
的C/C++运行期库,那么代
vector
作为
dll
接口参数_
DLL
中
传递
STL参数(如
Vector
或者list等)会遇到的
问题
[转载]...
最近的一个项目中遇到了
调用
别人的sdk接口(
dll
库)而传给我的是一个
vector
指针,用完之后还要我来删除的情况。这个过程中首先就是在我的exe中将其
vector
指针转为相应指针再获取
vector
中相应的数据
问题
,始终都获得不了正确的数据,要么就是一些非法的数据;另一个
问题
就是delete这个指针
时
候会产生相应异常(针对这个
问题
的思考:如果EXE和
DLL
都链接到
DLL
的C/C++运行期库,那么代...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章