看来我们可以通过包含所需的头文件来自由使用Windows API.但是,我无法理解这是如何可能的,因为头文件没有函数定义而是声明,这应该被认为是一个错误,因为它缺少实现细节.编译器以何种方式定位实现细节并将其映射到内存中?
Windows API在安装Windows时安装的DLL中实现.这些DLL位于System目录中,其名称类似于User32.dll,Kernel32.dll等.
正如您所正确指出的那样,随编译器提供的Windows API头文件仅包含声明.当您的C程序调用其中一个函数(或在头文件中标识但未实际使用您的项目编译的任何其他函数)时,编译器会在生成的目标文件中放置一条记录,该记录实际上是"我需要调用一个叫做的函数GetWindowRect(或者你调用的函数名称)."
该连接器是实际解析名称.如果你查看你的链接器选项,你会发现它链接了一些像User32.lib,Kernel32.lib等库.这些库包含的编译函数只是存根 - 代码导致相应的DLL被加载,然后调用DLL中的函数.
它比这更复杂,但这是一般的想法.综上所述: