C++ .lib由VS2005生成的二进制文件使用VS2008生成
在我用VisualStudio2005编译的程序中,有什么可以阻止我与VisualStudio2008构建的第三方.lib链接?谢谢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的部分定义为固定或向后兼容 因此,可以安全地调用函数和方法,传
- 混合STL和visual studio标头不起作用:
- 隔离非常困难:
- ABI本身是兼容的,因此任何对所有数据类型和函数签名使用相同定义的代码都可以,但是
- 系统内部结构定义和系统包含文件可能已更改,但
- ABI的部分定义为固定或向后兼容
- 在与DLL匹配的头文件中,或
- 在IDL文件中(因为这些文件在发布后永远不会更改),或
- 在另一个头文件(包括系统头文件)中,如果该定义保证是固定的
- 系统分配器的内部数据结构不是不变集合的一部分。由于指向已分配内存的指针同时也是指向其前面的分配结构的指针,因此永远不取消引用规则适用。因此:
- 解除分配传入的内存是不安全的,除了
/CoTaskMemAlloc()
之外CoTaskMemFree()
- 只有在DLL内部创建对象时才能调用虚拟析构函数(此处计算的是新表达式,而不是构造函数是否导出)
- 只有在DLL外部创建对象时,才能调用非虚拟析构函数
- 解除分配传入的内存是不安全的,除了
- STL不是不变集合的一部分,因此任何包含STL类型的
都是不安全的struct