- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为 Windows 编译一个程序。
我希望它检查系统中是否存在 foo.dll,如果不存在,则打印一条错误消息并退出。这样做安全吗:
/DELAYLOAD foo.dll
标志传递给链接器;auto handle = LoadLibraryA("foo.dll")
并检查 handle 是否不为 NULL;我想知道是否会由于混合延迟加载和手动调用 LoadLibraryA() 而造成某些问题。此外,如果有人可以建议一种更简单或更正确的方法来做我想做的事情,我将不胜感激。
最佳答案
如果您要这样做,您应该在对 LoadLibrary()
进行“测试”调用后立即调用 FreeLibrary()
-但肯定是在您通过调用其例程之一导致自动加载之前! (当然,前提是调用成功!)这样一来,负载冲突应该就没有问题了。 (您还可以进行进一步的测试,例如通过调用 GetProcAddress()
检查是否存在所有必需的例程。
一旦您确认 DLL 存在(并且显然是可加载的),您将继续执行 - 当您的可执行文件首次调用其导出函数之一时,DLL 将“自动”加载。
如果您已经(手动)加载了 DLL,那么它会尝试将自己加载到同一进程中两次(我认为)。这肯定会在某些时候引起问题。
PS:恕我直言,这是进行检查的好方法!!请让我们知道它的票价。
编辑:在评论中进行了(有些广泛的)讨论之后,我现在很清楚,没有必要调用 FreeLibrary()
- 无论是在我建议的时候,还是实际上,在程序结束时(无论如何它将被卸载)。但这仍然是一个很好的解决方案!
关于c++ - 混合延迟加载和手动调用 LoadLibraryA 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354699/
我正在尝试从另一个 dll 加载一个 dll(通过 LoadLibraryA)。这是问题所在: c:\**EXE_DIR**\myExe.exe // this exe loa
我正在为 Windows 编译一个程序。 我希望它检查系统中是否存在 foo.dll,如果不存在,则打印一条错误消息并退出。这样做安全吗: 将/DELAYLOAD foo.dll标志传递给链接器; 在
我绕过 LoadLibraryA,以阻止该函数被调用到我的应用程序中。它旨在阻止'dll注入(inject)'。如果您从未见过这些,请引用著名的 CDetour 库。 它hook了加载库函数甚至成功返
我编写了一些示例程序和 DLL 来学习 DLL 注入(inject)的概念。 我将DLL注入(inject)示例程序的注入(inject)代码如下(错误处理省略): std::wstring dll(
我正在尝试像这样加载一个 dll: dll_handle = LoadLibraryA(QString("%1\\module.dll") .arg(Q
DWORD dwLoadLibrary = (DWORD)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"); 当我转到
我们正在尝试使用 LoadLibraryA 函数从 64 位 dll 中加载一个 dll 库。它返回 126 错误 - 找不到模块。给函数的 dll 文件路径是正确的,我们确信。 我们已经尝试了一个虚
我已经使用 VS2008 向导创建了一个 MFCApp。在我的应用程序的“InitInstance()”中,我正在调用“LoadLibraryA()”方法,因为我需要加载一些 dll 文件。但是一旦我
所以我有一个汇编代码块,它初始化一个程序,解析 kernel32,找到 GetProcAddress,然后找到 LoadLibarayA 来加载 User32.dll。它工作到 LoadLibrary
在 vc++ 中,我有一个包含两个项目的解决方案。项目 A 有一个 dllLoader.h 和 dllLoader.cpp 用 LoadLibrary 加载一个 dll 我需要调用它在项目 B 中的功
我是一名优秀的程序员,十分优秀!