代码之家  ›  专栏  ›  技术社区  ›  aJ.

我可以在VC9项目中直接使用用VC6构建的C风格库吗?

  •  3
  • aJ.  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    冲突通常发生在C运行库中。主要思想是,内存应该在分配它的模块中释放。然后,使用使用不同版本编译器构建的库是安全的。另一个问题是结构体的打包,但如果只使用Visual C++编译器,则没有区别。

    Name mangling 在Visual C++中,每个版本都不同,但它仅适用于C++库。如果您使用C样式导出(例如,如果您有DEF文件),则无需担心。

    This 这个问题和你们的不完全一样,但可能会有所帮助。

        2
  •  2
  •   Die in Sente    16 年前

    主要问题是,用一个版本编译的代码必须与该版本的CRTL链接,将多个版本的代码混合到同一个DLL或EXE中是行不通的,因为这样两个目标代码都需要不同的RTL例程。

    另一方面,如果你链接包含不同库的单独DLL,它应该会起作用。毕竟,这就是DLL的全部意义。

    在这种情况下,我建议只使用 extern "C" __stdcall__ WINAPI _cdecl ...)

    此外,当您的应用程序有多个CRTL副本时,有一个微妙的陷阱:您有多个堆!如果一个对象被分配到一个堆上并释放到另一个堆,那么该堆会立即损坏,您将崩溃。