C++中vector string跨DLL失败,MSVC低版本调高版本生成DLL

在C++中,当MFC应用调用DLL时,遇到string和vector在不同编译选项下导致的内存问题。原因是各模块使用不同C运行时库,使得内存分配在不同堆中,引发崩溃。解决方案包括调整编译选项至相同运行时库,或使用基本类型替代STL容器,并遵循谁申请谁释放的原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,问题

问题一:

在一个MFC应用程序exe中,调用另一个DLL中的函数,函数中的一个形参是string类型的,每次调用都会出现乱码或者NULL的情况

调用前:

调用后:

以STL通过修改编译选项验证了这个问题。string在exe赋值的时候需要释放掉原来的内存空间,然后在DLL再申请新的内存空间,所以看到是NULL

注意,假如换成string对象赋值

std::string s = "getRouterRtpCapabilities";

send(s, body, promiseObj。。。

这样就和问题二一致了

问题二:

调用vector的引用

dll提供的接口

void getDevicesList(vector<string>&list) 

exe调用

void main()
{
    int i=0;
    {

        vector<string>list;

        getDevicesList(list)
    }

    //释放vector崩溃了

    int j=0;
}

2,原因:

不同的模块各自有一份C运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值