.lib使用VS2008构建,由VS2005构建的二进制文件使用

时间:2012-01-04 08:45:36

标签: c++ visual-studio visual-studio-2008 visual-studio-2005 binary-compatibility

什么阻止我在使用Visual Studio 2005编译的程序中使用Visual Studio 2008构建的第三方.lib链接?感谢

2 个答案:

答案 0 :(得分:2)

更新:这仅适用于DLL,这是原始问题。使用静态库,所有的希望都会消失。

我会尝试总结一些事实:

  • ABI本身是兼容的,因此对所有数据类型和函数签名使用相同定义的任何代码都可以,
  • 系统内部结构定义和系统包含文件可能已更改,
  • ABI的某些部分被定义为固定或向后兼容。

因此,调用函数和方法是安全的,传递完全(即包括其成员)定义的数据类型

  • 在与DLL匹配的头文件中,
  • 在IDL文件中(因为这些文件在发布后永远不会更改),
  • 在另一个头文件中,包括系统头文件,如果保证定义是固定的

对于指针成员,如果指针永远不被解引用,则放宽规则。

现在是棘手的部分:

  • 系统分配器的内部数据结构不是不变集的一部分。由于指向已分配内存的指针也是指向其前面的分配结构的指针,因此应用从不取消引用规则。从而:
    • 除了CoTaskMemAlloc() / CoTaskMemFree()之外,释放传入的内存是不安全的。
    • 只有在DLL内创建对象时才能调用虚拟析构函数(这里是 new-expression ,而不是导出构造函数)
    • 只有在DLL外部创建对象时,才能调用非虚拟析构函数。
  • STL不是不变的集合的一部分,因此任何包含STL类型的struct都是不安全的。

答案 1 :(得分:0)