【问题标题】:How to use VS2010 built dlls in VS2008如何在VS2008中使用VS2010内置的dll
【发布时间】:2011-06-30 07:32:36
【问题描述】:

在我的工作中,我们有 VS2008。 我工作的项目中有些伙伴,用VS2010(不能用VS2008)

他们必须基于 dll 构建,我必须在我的框架中使用该 dll...

我设法构建了主应用程序并链接了 dll。 应用程序启动,并创建来自 VS2010 dll 的对象, 但是当我尝试删除这些对象时应用程序崩溃了...

Windows 已在 app.exe 中触发断点。这可能是由于一个 堆损坏,这表明 app.exe 或任何 它已加载的 DLL。

您对如何解决此问题有任何想法吗?

【问题讨论】:

    标签: visual-studio-2010 visual-studio-2008 dll


    【解决方案1】:

    您同事的 DLL 链接到 VS2010 的运行时库。您的代码链接到 VS2008 的运行时库。

    当您从 VS2010 dll 调用某些函数来分配新对象时,它将在该库的堆上分配。当您对该对象调用“delete”时,VS2008 的运行时库将尝试将其从自己的堆中释放。由于它们不同,因此您会收到该错误。

    如果您要混合这样的运行时,您需要 VS2010 dll 为每种类型公开 free() 风格的函数(只是 C++ 析构函数)。在混合这样的运行时库时,您还应该非常小心其他一些事情,例如使用 STL 容器或任何类型的“写时复制”对象。一般来说,避免它更容易。

    【讨论】:

    • 是的,我知道我应该避免它,但不幸的是这是不可能的....当您说 VS2010 dll 时,您的意思是 vc2010 可再发行包或其他什么?感谢您的回答!
    • 要么是可再发行的运行时包,要么是静态链接运行时的 dll 本身;最终结果是一样的:两个不同的堆。
    【解决方案2】:

    在 dll 或 exe 中分配的对象应该在同一个地方释放。你需要和你的合作伙伴讨论这个问题。对于目标,可以使用重载分配和释放运算符http://www.cprogramming.com/tutorial/operator_new.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多