跨MSVCRT版本分配C ++对象

时间:2013-03-14 12:35:09

标签: c++ static-linking msvcrt

我有VS2010,我需要构建应用程序。 我也有.dib和.h使用VS2005构建的.dll。 这个库依赖于log4cxx.dll(我建立了2010并下载了2005二进制文件)。 当我调用库接口方法返回对构建对象的引用时,它抛出AV异常。我无法使用其他版本构建我的应用程序,并且我已经尝试更改为多线程调试我的应用程序类型。

1 个答案:

答案 0 :(得分:1)

您获得的对象可能有另一种内存布局。 如果要跨运行时边界传递c ++对象,则应确保接收对象具有相同的布局。例如,如果VS2005编译器重新排序了它的字段以进行优化,VS2010则以其他方式完成。或者您使用的类之一(例如std :: string)在版本之间发生了变化。阅读从COM方法返回对象的方式。

一个运行时中的对象分配和另一个运行时的释放也存在问题......

作为解决方案,您可以尝试安装VS2005,但无法保证您最终会同样