【问题标题】:Which header file loads the DLLs in Win32 api?哪个头文件加载 Win32 api 中的 DLL?
【发布时间】:2014-04-13 19:47:34
【问题描述】:

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

这是如何工作的?

【问题讨论】:

    标签: c windows winapi dll


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢...链接器如何知道需要哪个 lib 文件?
    • 您告诉它要链接哪些库作为传递给链接器的参数。查看 vs 配置中的链接器选项
    • @user2263786:这个问题可以帮助填写一些细节:stackoverflow.com/questions/9198787
    • 再次感谢,最后一个:我在 vs 配置中看到了一个 lib 文件列表,链接器是链接所有这些文件还是搜索我实际使用的 lib?
    • 它只是链接你在程序中调用的函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多