我可以在VC9项目中直接使用VC6构建的C风格库吗?
-
06-07-2019 - |
题
我们使用由VC6编译器构建的内部库(由其他团队开发)。该库主要包含C Style API。我们计划迁移到Visual Studio 9编译器。我应该要求使用VC9编译器构建库吗?
一个更通用的问题,使用两个不同版本的Visual Studio编译器构建的DLL在哪些方面(可能是名称修改,优化等)不同?
其他提示
AFAIK,Visual C ++名称修改从发布到发布都很稳定。
主要问题是用一个版本编译的代码必须与该版本的CRTL链接,并且将来自多个版本的代码混合到同一个DLL或EXE中将不起作用,因为这两个对象代码都需要不同的RTL例程。
另一方面,如果你链接包含不同库的单独的DLL,它应该工作。毕竟,这就是DLL的重点。
在这种情况下,我建议仅使用 extern“C”
API和(如果这是32位代码)显式指定调用约定( __ stdcall __
或 WINAPI
或 _cdecl
...)
此外,当你的应用程序有多个CRTL副本时,有一个微妙的问题:你有多个堆!如果一个对象在一个堆上分配并释放到另一个堆,则该堆立即被破坏并且您将崩溃。
总而言之,如果你能用编译器重新编译它们,那是最简单的事情。
不隶属于 StackOverflow