c++ - 动态链接如何对对象的变化使用react

标签 c++ windows dll dllimport lib

我已经编译了一个与动态库(比如Y.dll)链接的组件(比如X.exe)。 XY 已经发布。

现在我对 Y 持有的对象函数做了一个小改动:我deleted 了一个泄漏的对象并将它的指针设置为 NULL.

要以完全兼容的方式应用此更改,我应该怎么做?

  1. 需要用新的库文件重新编译组件X,同时需要替换DLL;

  2. 用新的库文件重新编译X就够了;

  3. 替换 DLL 就足够了。

最佳答案

Now I have made a small change in an object's function which Y holds.

需要做什么取决于您所做的具体更改。对于这些类型的情况,我们可以区分两种类型的更改:ABI 破坏性更改和 ABI 兼容更改。

ABI (Application binary interface)是二进制级别的已编译对象的接口(interface)。与 C++ 函数具有 API 的方式类似(例如,函数的签名是 API 的一部分),编译后的机器语言具有依赖于 API 和调用约定等的 ABI。

了解哪些更改会破坏 ABI,哪些不会,有时可能是一项艰巨的任务。但根据经验:

  • 如果您没有更改 Y 的 API,则 Y 的 ABI 不变;
  • 如果您确实更改了 Y 的 API,那么 Y 的 ABI 也会更改。

现在,如果您破坏了 Y 的 ABI,您应该发布它的新版本(我们称之为 Y-2)。 XY-2 不兼容,需要升级(可选)和重新编译(强制)并作为新版本发布(我们称它为 X-2). XY-2 不兼容 ABI。 X-2Y 不兼容 ABI。

如果 Y 的 ABI 未受影响,您可以安全地分发新版本的 Y(我们称之为 Y-1.1)将替换目标计算机上的 Y 并与原始 X 链接。

从评论看来:

The change I have done is just deleting a leaked object and made it to NULL.

这既不是 API 也不是 ABI 重大更改。您只能安全地分发 Y-1.1

关于c++ - 动态链接如何对对象的变化使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52494130/

相关文章:

c++ - 在 C++ 的字符串中定位 STX 和 ETX

windows - 是否有人在使用他们会推荐给其他人的第三方 Windows 注册表编辑器?

c# - 为 Windows 编写我自己的自定义命令行 "wrapper"

c++ - 如何在 MFC 常规 DLL 中创建和使用 CFormView? ( Visual Studio 2008)

c++ - NuiApi.h 在 Visual Studio 2012 DLL 项目中包含失败

c++ - Qt:创建铅笔/画笔工具

c++ - 无法取消引用 map const 迭代器的 mapped_type

c++ - 更新顶点缓冲区会导致调试层错误

java - 增加基于 Windows 安装程序的 Tomcat PermGen Space

c# - 如何获取 WPF 应用程序的默认路径数据库位置?