gpt4 book ai didi

c++ - 使用 VS2008 构建的 .lib 由使用 VS2005 构建的二进制文件使用

转载 作者:行者123 更新时间:2023-11-30 04:30:23 26 4
gpt4 key购买 nike

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

最佳答案

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

我将尝试总结一些事实:

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

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

  • 在匹配DLL的头文件中,或者
  • 在 IDL 文件中(因为一旦发布就永远不会更改),
  • 在另一个头文件中,包括系统头文件,如果定义是固定的

对于指针成员,如果指针从未被取消引用,则规则放宽。

现在是棘手的部分:

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

关于c++ - 使用 VS2008 构建的 .lib 由使用 VS2005 构建的二进制文件使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com