8

我的应用程序解决方案设置如下 - (我正在使用 Visual Studio,这是一个 VC++ 项目)

应用库依赖图

注意:蓝色项目编译为静态库。

如您所见,exe 和 dll 共享一些静态库( core.lib 和 utils.lib ),而 exe 反过来使用 DLL(通过使用导入库的“加载时动态链接”)。

我的问题是它是正确的依赖设置吗?我看到的问题是,当这个应用程序启动并运行时,进程地址空间中会有一些重复的代码吗?也就是说,Core.lib 和 Utils.lib 中的所有函数都会出现两次,对吗?因为,Exe 和 DLL 将把这段代码分别编译进去。

如果是,则处理上述问题的一种方法是将代码移至 dll 专有或保留在 exe 中并通过导入/导出共享它(b/w exe 和 dll)。但我在核心和实用程序中有很多类对象,我不喜欢在头文件中导出/导入这些类对象(通过附加 __declspec(dllimport/dllexport))的想法,此外我可能最终会将它添加到很多依赖类对象

这是我的理解,我可能错了。请提出更正建议,处理此类问题的通常方法是什么?

问候,

4

3 回答 3

2

如果你使用 DLL,你必须一直使用 DLL,所有依赖关系都到 c-runtime。代码重复(内存占用)并不是最糟糕的问题。请记住,应用程序分配的内存不能被 dll 释放,反之亦然,除非两者都使用相同的运行时 (dll)。

于 2013-08-29T16:19:38.137 回答
0

是的,Core 和 Utils 代码将被复制。您可以将它们构建为 dll 并在任何地方使用,而不是将它们构建为静态库。

于 2013-08-29T14:50:25.353 回答
0

我的建议是:继续按原样编写代码,直到出现问题或出现非常需要更改的情况。

于 2015-10-12T18:46:03.377 回答