2012-11-03 49 views
3

我正在使用LoadLibrary动态加载另一个DLL(winsock)的DLL。我读过,我不应该在DllMain中调用LoadLibrary,但我反复使用它,并且不希望每次使用它时都必须调用LoadLibrary/GetProcAddress。所以我的问题是:DLL在哪里调用LoadLibrary?

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

  • LoadLibrary/GetProcAddress有多快?每个功能都有很多开销吗?

回答

3

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

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

GetProcAddress()应该也只能被称为每个函数一次(理想情况下)。该函数必须遍历DLL的导出表并按名称查找函数。这涉及字符串比较以查找地址。你想稍后缓存地址,以便下次直接调用它。

+0

感谢您的解释。 – vandev

相关问题