在带有/ MTd CRT的本机c ++ exe中使用带有/ MDd CRT的CLI C ++ dll

时间:2011-06-08 10:27:55

标签: c++-cli msvcrt crt

我有一个使用/ MTd运行时库的本机c ++ exe。我无法更改此选项,因为我没有太多控制此exe的构建。我需要在这个exe中调用一个CLI C ++ dll,它返回一个带有STL向量成员变量的类。在返回CLI C ++方法时,我收到堆损坏错误。根据我的分析,这是因为有两个不同的CRT,并且矢量deallocate方法在本机CRT和由于无效地址导致的炸弹中运行。

如何从使用不同CRT编译的CLI C ++ dll返回一个向量来运行我的本机exe?

1 个答案:

答案 0 :(得分:1)

您的评估是正确的 - 在一个CRT内执行的分配无法在不同的CRT内部解除分配。这是一个简单的规则,没有办法解决它。

您需要使用相同的运行时库设置构建两个模块,或者只需要在模块边界之间传输POD类型。