我正在创建一个供其他人使用的静态库。这种静态库采用了Windows头,并且在许多它使用了Windows定义功能,如DWORD,PDWORD,LPVOID,等等。我想这是有点严格为真在我的库中定义函数,减少误用。但是,如果我在我的静态库的头文件中包含 Windows 头文件,那么包含我的库的人将自动包含 Windows 头文件,并且我不相信这是执行此过程的正确方法我通常包含在其他项目中的库也要求我包含正确的头文件。那么我应该如何“要求”使用我的库的人也包含 windows 标题,或者至少让我的库检查是否已经包含 windows 标题?这也适用于其他标头,只是一般情况下(即,如果我必须包含 iostream,那么我想检查是否已包含 iostream 标头)。
本质上,我的静态库应该优先于用户的所有包含,还是根据用户已经包含的内容进行调整?如果用户包含我的库,让他们简单地包含我的库的标题而不包含其他内容会更好,还是有某种方法可以使用户在我的库之外包含他们需要的内容?
为了一些额外的清晰度:
#include "MyLibrary.h"
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) {
// Stuff
}
或者
#include <Windows.h>
#include "MyLibrary.h"
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) {
// Stuff
}
无论您包含多少次Windows.h
,它都已经将其内容包含在#ifndef
-#endif
构造中。如果它被包含一次,那么一些宏已经被定义并且头文件中的代码将不会被再次包含。
另一方面,如果您的库是静态的,则它不再依赖于任何外部代码,所有来自Windows.h
库的符号实际上都是该库私有的,其他任何东西都看不到。
编辑:澄清您上次的编辑。
公共 API 应该在您的库的 .h 中。如果Windows.h
不是你提供的 API 的一部分,你最好把它放在你的 .cc 中,所以,第二个选择。相反,如果在Windows.h
公共 API 的定义中使用了某些定义,请将其包含在 .h 中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句