我有一个包含代码(导出函数)和数据(作为资源嵌入的二进制数据)的 DLL。
这个 DLL 静态链接到我的程序 (EXE) 中。为了访问 DLL 中的二进制数据,我需要此 DLL 的句柄 (HMODULE),以便我可以将此句柄传递给诸如 FindResource() 等的 Win32 API。
我的查询是哪个函数 - LoadLibrary() 或 GetModuleHandleEx() - 我应该在这个静态链接的 DLL 上使用,以便保证返回的句柄是非 NULL(即有效)。
我参考了 GetModuleHandleEx() 上的 MSDN 文档。它说这个 API 将用于获取已加载模块的句柄,但它没有说明当它用于静态链接(也可以假设已经加载)DLL 时的行为是什么。
LoadLibrary() 对我来说很好,但我担心它是否会在将静态链接的 DLL 再次加载到我的程序地址空间时产生额外的开销?还是使用 LoadLibrary() 只会增加 DLL 的引用计数?
静态链接的 .DLL 是固定的,无法卸载。LoadLibrary
并GetModuleHandle
在固定的 .DLL 上具有相同的行为(假设您传入正确的名称)。
LoadLibrary
将增加引用计数(在非固定的).DLL 上,但它不会改变地址空间。调用LoadLibrary
尚未加载的路径当然会加载一个新模块,而 asGetModuleHandle
会失败。如果您传入没有路径的文件名,它们将作用于已加载的 .DLL(如果存在)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句