【发布时间】:2017-07-27 12:45:24
【问题描述】:
我对 C++ 中的头文件有疑问。 ntdll.dll 中的函数无法正常调用。 (当我们包含它的头文件时我们可以调用函数,但是 nt API 的 总是由 GetProcAddress(GetModuleHandle("ntdll.dll"), "FuncName") 调用。
于是我搜索了nt函数,有人说官方没有关于ntdll.dll的头文件,所以我必须使用GetProcAddress来调用它们。
什么是头文件? 编译器如何知道链接到头文件的dll函数? (对于 EX,如果我们使用 MessageBox() ,那么编译器知道它在 kernel32.dll 中) 也许我猜..头文件中有dll导入上下文(语法), 例如... windows.h 具有导入“kernel32.dll”上下文,所以编译器 可以知道。是真的吗?
【问题讨论】:
-
问题是 - 编译器不知道这一点。 .dll 的全部性质是,它们是动态 链接库。您调用的过程的地址在运行时解析。
-
您要么需要声明(通常在 API 标头中)和 lib 文件,要么需要使用
GetProcAddress并从文档中“了解”您需要什么。 lib 文件知道函数所在的 DLL,而不是头文件。 -
非常感谢@AlgirdasPreidžius
-
@crashmstr 非常感谢~
标签: c++ dll compiler-construction