DLL传递字符串数组输出参数

实现了一个数据库模块,提供枚举数据库服务器功能,返回所有数据库服务器名称。一开始想通过vector<string>输出参数方式,在DLL中添加数据库服务器名称。不过在释放输出参数的时候出现错误,这是由于输出参数的资源是在DLL中申请,而在主程序中进行释放,如果申请和释放的方式不一致,就会导致释放出错。

主要的解决方法就是谁申请谁释放。对于这种动态申请的资源,由于资源数量不确定,最好是由DLL来提供接口进行释放。就是输出参数使用完成后,调用DLL释放接口进行释放。返回字符串数组可以有两种方式,一种是直接返回字符串数组,在释放的时候需要先对每个字符串进行释放,再对字符串指针数组进行释放。另一种是将所有字符串通过特定分隔符拼接成一个字符串返回,由上层去分割字符串,释放的时候只需要释放这个字符串就行。这种方法适合字符串的长度较短,内容格式没那么复杂,能够找到一个不重复的字符或字符串来作为分隔符。在我的应用中使用的是第二种方法。

还有一种解决是修改dll和调用dll的应用的工程属性,选择project> settings> c/c++> code generation下的using run-time library为 multi threaded dll, Debug版则选debug multi threaded dll。

由于dll和应用程序可能是由不同人开发,或者由于某些原因需要采用静态链接库方式,所以建议采用由DLL提供释放接口的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值