【发布时间】:2014-04-13 19:47:34
【问题描述】:
例如,调用 MessageBox 我只需要包含 windows.h,因此我假设某些头文件会执行实际的 LoadLibrary。
这是如何工作的?
【问题讨论】:
例如,调用 MessageBox 我只需要包含 windows.h,因此我假设某些头文件会执行实际的 LoadLibrary。
这是如何工作的?
【问题讨论】:
声明MessageBox 的Windows 头文件声明了它但没有定义它。换句话说,头文件只是声明了一个函数,该函数具有在其他地方定义的特定原型。
定义由导入库提供。对于MessageBox,该导入库是user32.lib。该导入库被传递给链接器并提供定义。
实现MessageBox,user32.dll的Windows DLL的实际加载是由加载器完成的。链接器发出一个可执行文件,其中包含声明相关 DLL 的元数据以及必须导入的函数。那是PE导入表。在进程加载时,加载器读取导入表,加载依赖的 DLL,并解析引用。
【讨论】: