c - 哪个头文件加载 Win32 api 中的 DLL?

标签 c windows winapi dll

例如,要调用 MessageBox,我只需要包含 windows.h,所以我假设一些头文件执行实际的 LoadLibrary。

这是如何工作的?

最佳答案

声明MessageBox的Windows头文件声明了它,但没有定义它。换句话说,头文件只是声明有一个函数具有在其他地方定义的特定原型(prototype)。

定义由导入库提供。对于 MessageBox,该导入库是 user32.lib。该导入库被传递给链接器并提供定义。

实现MessageBox的Windows DLL,user32.dll的实际加载是由加载器完成的。链接器发出一个可执行文件,其中包含声明依赖 DLL 和必须导入的函数的元数据。那就是 PE 导入表。在进程加载时,加载程序读取导入表、加载依赖 DLL 并解析引用。

关于c - 哪个头文件加载 Win32 api 中的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22304715/

相关文章:

c - 尝试运行 C 程序时没有任何效果?

c# - CONTENT-AWARE FILL 在 Photoshop 中如何工作?

c - Win7 中的 SendMessageA 和 SendMessageW 从 WinXP 迁移而来

c - ShellExecute 在哪里找到 exe 文件

c - ruby FFI : Pointer to an array of unsigned integer

c - 如何从我的自定义队列中取出元素

c - 在c中使用转义序列使用循环在打印数组末尾打印换行符

c - 解释如何仅使用这两行 : 在 C 中为二维数组分配和释放内存

java - cmd.exe 意外挂起,具体取决于我使用的文件所在的位置

c++ - 适用于 C++ 的 Dropbox 同步 API