2

我有几个库,每个库都编译为 DLL,并被某些应用程序使用。我刚刚在其中一个库 (LIB_1) 中开发了一个类 (CLASS_A),该类继承自另一个库 (LIB_2) 中存在的类 (CLASS_B),因此它被编译到另一个 DLL。

到目前为止,我看不出这个解决方案有任何明显的缺点。另一种方法是制作 CLASS_A 的副本并将其放在 LIB2 中,以便 CLASS_B 可以从它继承,但我想避免这种解决方案,因为我想避免拥有 2 个不同版本的“相同”基类。

¿ 从 DLL 中的类继承有什么重要的缺点吗?

非常感谢!

4

1 回答 1

4

在设计说明上,没有真正的问题。依赖树稍微复杂一些,例如如果主程序直接使用类 A 和 B:

EXE
 +--------+
 v        v
LIB_1    LIB_2
 |
 v
LIB_2

主要问题是二进制兼容性。除非您使用纯虚拟接口,否则您的库将是可继承的,并且只能用于使用相同编译器的相同版本、兼容设置(即兼容编译器选项)制作的可执行文件或 dll。

除了二进制兼容性,dll 通常可以有自己的堆空间。即使使用纯虚拟接口,您也需要注意在 dll 中使用了哪个 CRT(如果 dll 分配内存,则只有这个 dll 应该释放它,因此相同的 CRT 用于 malloc/free)。

您可以阅读这个 SO question这篇文章以获取更多信息。在处理如何在 dll 中导出类时,另一篇文章也是一本非常有趣的读物。

于 2013-09-05T19:45:12.580 回答