C ++ MSVS dll头文件#include问题

时间:2010-10-23 02:36:52

标签: c++ dll include header

我大部分时间都没有使用lib链接和dll编码,最近当我这样做时,我意识到我的#include方式可能会出现问题。

以下是正确/可取的方式#include吗?

假设我有3个项目(1)dll_A(2)dll_B(3)exe_1。 dll_A取决于dll_B,exe_1取决于一个dll_A。

我的方式#include如下:

dll_B.h ----> no dependency
dll_B.cpp -----> #include dll_B.h
dll_A.h -------> #include dll_B.h
dll_A.cpp -------> #include dll_A.h
exe_1.h --------> #include dll_A.h

从这里可以看出,exe_1.h间接包含dll_b.h,这对我有点不好,因为我希望exe_1.h独立于dll_b.h ...但是,我不确定是否是可能的,因为exe_1链接到dll_b怎么办?

编辑:示例依赖

// dll_B.h
struct dataB{};

// dll_A.h
#include dll_B.h
dataB* A_function_ptr(); // (any difference for implementing PIMPL?)
dataB& A_function_ref();
dataB A_function_copy();

// exe_1.cpp
#include dll_A.h
// ... it seems naturally #include-sion of dll_B.h is necessary? Can it be avoided?

1 个答案:

答案 0 :(得分:1)

如果dll_B只是dll-A的一个实现细节,那么不要在[dll_A.h]中包含[dll_B.h],只需在[dll_A.cpp]中包含它。

避免头部依赖可能需要稍微重新设计。

E.g。您可能想要考虑[{3}} [dll_A]。

如果不了解更多细节,就无法说明更多细节......: - )

干杯&第h。,

PS:链接与头文件无关,除了某些Windows编译器(特别是MSVC)之外,头文件可以包含#pragma,导致自动链接到正确的库。