4

我正在制作一个使用 LoadLibrary 动态加载另一个 DLL (winsock) 的 DLL。我读到我不应该在 DllMain 中调用 LoadLibrary,但是我反复使用它,并且不想每次使用时都调用 LoadLibrary/GetProcAddress。所以我的问题是:

  • 在 DLL 中调用 LoadLibrary 的最佳位置在哪里?

  • LoadLibrary/GetProcAddress 有多快?在每个函数中这样做是否有很多开销?

4

1 回答 1

4

创建一个在 DllMain 之外进行设置的初始化函数。您的代码在加载 DLL 后调用该函数,然后它可以调用完成初始化所需的任何内容。

调用 LoadLibrary() 应该只执行一次。这是昂贵的,因为操作系统必须确保在继续之前加载所有依赖项,并在进程中保留空间。如果 DLL 已经加载,这比必须从磁盘加载要快得多。

GetProcAddress() 实际上也应该每个函数只调用一次(理想情况下)。该函数必须遍历 DLL 的导出表并按名称定位函数。这涉及到字符串比较来定位地址。您想缓存该地址以供以后使用,以便下次直接调用它。

于 2012-11-03T01:46:51.280 回答