代码之家  ›  专栏  ›  技术社区  ›  Dana Robinson

使用VisualStudio 2008编译的C++ DLL可以与VisualStudio 2005一起使用吗?

  •  3
  • Dana Robinson  · 技术社区  · 15 年前

    我将使用C++语言编写的C++库(不.NET和MFC)。该库可以使用Visual Studio 2005/Intel Fortran 9.1和VS 2008/Intel Fortran 10.1编译。

    显然,我要抓住VS 2008的二进制文件,因为这是我的计算机上的环境,但我很好奇,为什么有一个直的C++库在VS 2005和2008之间不兼容的原因。我想曼格林这个名字是一样的,但也许还有其他原因。我很久没有使用C++了,所以在这些方面我有点生疏了。

    3 回复  |  直到 15 年前
        1
  •  2
  •   JaredPar    15 年前

    你会遇到的最大问题是CRT的使用。如果crt(c运行时)静态链接到dll,则不应该有任何问题。

    但是,如果CRT动态链接到项目中,您可能会遇到麻烦。Visual Studio 2005和2008使用了不同版本的CRT,因此很难将它们加载到表中。但如果一个或两个动态链接库的静态链接的CRT,你应该是在体面的形状。

        2
  •  3
  •   Adam Rosenfield    15 年前

    它可能会起作用。用VS2005编译的DLL将依赖于VS2005对C标准库的实现。( msvcr80.dll ,而您的代码将依赖于VS 2008的C库。( msvcr90.dll )这意味着在运行时,两个版本的C库都将被加载,这是可以的,但它会增加内存使用量,并将加载时间降低很小的一部分。

        3
  •  3
  •   Reed Copsey    15 年前

    正如其他海报所评论的,你应该能够以这种方式工作。

    然而,有一个问题可能是一个大的单内存管理。C++运行时,特别是,可能是棘手的。

    最大的问题是2005年和2008年的运行时如何管理内存之间存在一些不兼容性。只要您总是在VS2008 DLL中分配内存,并且总是删除从该DLL中分配的内存,那么一切都可以正常工作。这通常需要在DLL中创建一些“额外的”工厂和清理方法,并公开这些方法。

    如果在VS2008 DLL中分配内存,然后将其从使用VS2005编译的代码中删除,或者反之亦然,则可能会遇到一些非常难以调试的问题。它通常会工作,但有随机崩溃或不稳定。