1
我有VS2010,我需要构建应用程序。 另外我有.lib和.h用.200和.200构建的.dll。 这个库取决于log4cxx.dll(我建立了2010并下载了2005二进制文件)。 当我调用库接口方法返回对构建对象的引用时,它抛出AV异常。我无法用另一个版本构建我的应用程序,我已经尝试更改为Multithreaded调试我的应用程序类型。跨MSVCRT版本分配C++对象
我有VS2010,我需要构建应用程序。 另外我有.lib和.h用.200和.200构建的.dll。 这个库取决于log4cxx.dll(我建立了2010并下载了2005二进制文件)。 当我调用库接口方法返回对构建对象的引用时,它抛出AV异常。我无法用另一个版本构建我的应用程序,我已经尝试更改为Multithreaded调试我的应用程序类型。跨MSVCRT版本分配C++对象
您正在获取的对象可能有另一个内存布局。 如果您正在跨运行时边界传递C++对象,则应确保接收对象具有相同的布局。例如,如果VS2005编译器重新排序它的字段进行优化,VS2010以其他方式完成。或者你使用的一个类(例如std :: string)在版本之间改变。阅读如何从COM方法返回对象。
还拥有一个运行时对象的分配和释放的另一个问题...
作为一个解决方案,您可以尝试安装VS2005,但你最终同
形势更加没有保障兴趣:我有VS2005 DLL,这取决于log4cxx VS2008,我试图从VS2010链接库。它崩溃在这样的一个点:我在应用程序中创建矢量,并将其传递给库,并在发布时崩溃 – deeptowncitizen 2013-03-14 13:31:27
@deeownowncitizen这是非常糟糕的情况:)但正如我所说,传递的对象,并非专门为此设计的std :: vector不是)在运行时之间是危险的。即使使用VS的一个版本,您也可能会遇到错误,例如,如果一方定义了SECURE_SCL而另一方不是。对象会有所不同。 – kassak 2013-03-14 13:37:17
我想这里是另一件事:我在我的应用程序堆栈上创建矢量,并通过引用该函数(库中的const方法)来传递它。所以这里不应该是一些内存问题。我对吗?库只是叫我的记忆矢量push_back – deeptowncitizen 2013-03-14 13:56:44