在我的工作中,我们有 VS2008 。 我工作的项目中的一些合作伙伴,使用 VS2010 (不能使用VS2008)
他们必须建立一个基于dll的我必须在我的框架中使用该dll ...
我设法构建主应用程序并链接dll。 应用程序启动,并创建VS2010 dll的对象, 但是当我尝试删除这些对象时,应用程序崩溃了......
Windows在app.exe中触发了断点。这可能是由于a 堆的损坏,表示app.exe或任何一个中的错误 已加载的DLL。
您对如何解决此问题有任何想法吗?
答案 0 :(得分:4)
您的同事的DLL与VS2010的运行时库链接。您的代码与VS2008的运行时库链接。
当您从VS2010 dll调用某个函数来分配新对象时,它将在该库的堆上分配。当您在该对象上调用“delete”时,VS2008的运行时库将尝试将其从自己的堆中释放。由于它们不同,因此会出现错误。
如果要混合这样的运行时,则需要VS2010 dll为每种类型公开free()
- 样式函数(不只是C ++析构函数)。在混合运行时库时,您应该非常小心,例如使用STL容器或任何类型的“写时复制”对象。一般来说,避免它更容易。
答案 1 :(得分:0)
在dll或exe中分配的对象应该在同一个地方解除分配。您需要与合作伙伴讨论这个问题。因为目标可以用于重载分配和解除分配运算符http://www.cprogramming.com/tutorial/operator_new.html