gpt4 book ai didi

c++ - 哪种方法更好地获取静态链接 DLL 的模块句柄 (HMODULE) - 使用 GetModuleHandleEx() 或 LoadLibrary()?

转载 作者:行者123 更新时间:2023-11-28 01:22:59 28 4
gpt4 key购买 nike

我有一个包含代码(导出函数)和数据(作为资源嵌入的二进制数据)的 DLL。

此 DLL 静态链接到我的程序 (EXE) 中。为了访问 DLL 中的二进制数据,我需要此 DLL 的句柄 (HMODULE),以便我可以将此句柄传递给 FindResource() 等 Win32 API。

我的查询是哪个函数 - LoadLibrary() 或 GetModuleHandleEx() - 我应该在此静态链接的 DLL 上使用,以便返回的句柄保证为非 NULL(即有效)

我引用了有关 GetModuleHandleEx() 的 MSDN 文档。它表示此 API 将用于获取已加载模块的句柄,但未说明在静态链接(也可以假定已加载)DLL 上使用时的行为。

LoadLibrary() 对我来说很好,但我担心的是它是否会在将静态链接的 DLL 再次加载到我的程序的地址空间时产生额外的开销?还是使用 LoadLibrary() 只会增加 DLL 的引用计数?

最佳答案

静态链接的 .DLL 是固定的,无法卸载。 LoadLibraryGetModuleHandle 在固定的 .DLL 上具有相同的行为(假设您传递的名称正确)。

LoadLibrary 将增加引用计数(非固定).DLL,但不会更改地址空间。在尚未加载的路径上调用 LoadLibrary 当然会加载一个新模块,而 GetModuleHandle 将失败。如果您传入没有路径的文件名,它们将作用于已加载的 .DLL(如果存在)。

关于c++ - 哪种方法更好地获取静态链接 DLL 的模块句柄 (HMODULE) - 使用 GetModuleHandleEx() 或 LoadLibrary()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55243150/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com