Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ .lib由VS2005生成的二进制文件使用VS2008生成_C++_Visual Studio_Visual Studio 2008_Visual Studio 2005_Binary Compatibility - Fatal编程技术网

C++ .lib由VS2005生成的二进制文件使用VS2008生成

C++ .lib由VS2005生成的二进制文件使用VS2008生成,c++,visual-studio,visual-studio-2008,visual-studio-2005,binary-compatibility,C++,Visual Studio,Visual Studio 2008,Visual Studio 2005,Binary Compatibility,在我用VisualStudio2005编译的程序中,有什么可以阻止我与VisualStudio2008构建的第三方.lib链接?谢谢 混合STL和visual studio标头不起作用: 隔离非常困难: 更新:这仅适用于DLL,这是最初的问题。有了静态库,一切希望都破灭了 我将尝试总结一些事实: ABI本身是兼容的,因此任何对所有数据类型和函数签名使用相同定义的代码都可以,但是 系统内部结构定义和系统包含文件可能已更改,但 ABI的部分定义为固定或向后兼容 因此,可以安全地调用函数和方法,传

在我用VisualStudio2005编译的程序中,有什么可以阻止我与VisualStudio2008构建的第三方.lib链接?谢谢

  • 混合STL和visual studio标头不起作用:
  • 隔离非常困难:

更新:这仅适用于DLL,这是最初的问题。有了静态库,一切希望都破灭了

我将尝试总结一些事实:

  • ABI本身是兼容的,因此任何对所有数据类型和函数签名使用相同定义的代码都可以,但是
  • 系统内部结构定义和系统包含文件可能已更改,但
  • ABI的部分定义为固定或向后兼容
因此,可以安全地调用函数和方法,传递完全定义(即包括其成员)的数据类型

  • 在与DLL匹配的头文件中,或
  • 在IDL文件中(因为这些文件在发布后永远不会更改),或
  • 在另一个头文件(包括系统头文件)中,如果该定义保证是固定的
对于指针成员,如果指针从未取消引用,则该规则将被放宽

现在是棘手的部分:

  • 系统分配器的内部数据结构不是不变集合的一部分。由于指向已分配内存的指针同时也是指向其前面的分配结构的指针,因此永远不取消引用规则适用。因此:
    • 解除分配传入的内存是不安全的,除了
      CoTaskMemAlloc()
      /
      CoTaskMemFree()
      之外
    • 只有在DLL内部创建对象时才能调用虚拟析构函数(此处计算的是新表达式,而不是构造函数是否导出)
    • 只有在DLL外部创建对象时,才能调用非虚拟析构函数
  • STL不是不变集合的一部分,因此任何包含STL类型的
    struct
    都是不安全的

一个自我回答的问题?你打算把这个维基起来吗?