【问题标题】:Where to call LoadLibrary in a DLL?在 DLL 中哪里调用 LoadLibrary?
【发布时间】:2012-11-03 01:26:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ c windows dll


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2011-04-04
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多