[英]How does Windows API work?
似乎我们可以自由地通过包含所需的头文件来自由使用Windows API。 但是,鉴于头文件没有函数定义而是声明,因此我无法理解这一点,因为缺少实现细节,应该将其视为错误。 编译器以什么方式定位实现细节并将其映射到内存中?
Windows API在安装Windows时安装的DLL中实现。 这些DLL位于System目录中,并具有User32.dll,Kernel32.dll等名称。
如您正确指出的那样,编译器随附的Windows API头文件仅包含声明。 当您的C程序调用这些函数之一(或在头文件中标识但未随您的项目实际编译的任何其他函数)时,编译器会在生成的目标文件中放置一条记录,该记录实际上说:“我需要调用一个名为GetWindowRect
的函数(或您调用的函数的任何名称)。”
链接器实际上是解析名称的工具。 如果查看链接器选项,则会看到它正在链接某些库,例如User32.lib,Kernel32.lib等。这些库包含的编译函数只不过是存根而已,这些代码导致相应的DLL被加载。 ,然后在DLL中调用该函数。
比这要复杂得多,但这是总的想法。 综上所述:
它的工作方式与任何其他库(例如C stdlib
-您的程序仅需要“知道”函数的原型(并因此知道底层的符号名称)。 编译后出现链接-就是在丢失的符号(函数定义)与正确的库“链接”时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.