Windows上的DLL链接会在运行时导致GetProcAddress吗?

时间:2016-02-18 16:32:00

标签: c++ windows dll

我很好奇动态链接如何在Windows上运行。由于我们无法直接链接到Windows,因此Windows通常会将您的可执行文件链接到LIB文件,该文件包含DLL导出的函数存根。这种类型的链接是否在运行时产生LoadLibraryGetProcAddress?如果没有,链接如何在内部工作?

1 个答案:

答案 0 :(得分:2)

答案是也许

默认方法是创建一个导入表,其中列出了所有必需的DLL以及从那里使用的函数。该表由OS直接解析。它可能会重用LoadLibrary背后的一些相同代码。它很可能使用GetProcAddress中的代码,但更喜欢对所有必要的函数进行单个批量查找​​。

然而有一个名为延迟加载的MSVC功能。使用此功能,MSVC ++不会构建此类导入表,而是插入实际的LoadLibraryGetProcAddress调用。好处是这些电话是在最近的时刻发出的。虽然您不需要特定的DLL,但它没有加载。这可以加速程序启动。