编译器如何知道dll导入的函数?

How does the compiler knows the function which is imported by dll?

我对 C++ 中的头文件有疑问。 ntdll.dll中的函数无法正常调用。 (当我们包含它的头文件时我们可以调用函数,但是 nt API 的 总是由 GetProcAddress( GetModuleHandle("ntdll.dll"), "FuncName").

调用

所以我搜索了nt函数,有人说官方没有ntdll.dll的头文件,所以我必须使用GetProcAddress来调用它们。

什么是头文件? 编译器如何知道链接到头文件的dll函数? (对于 EX,如果我们使用 MessageBox() ,那么编译器知道它在 kernel32.dll 中) 也许我猜..头文件中有dll导入上下文(语法), 例如像... windows.h 有 import "kernel32.dll" 上下文,所以编译器 可以知道。是真的吗?

您还需要 .lib 个文件。它包含函数地址。 dll .h 不需要的文件 .lib 只能尝试找到这些地址 selfstate(就像你说的那样)