我正在编写一个 C++ Windows 桌面应用程序,它使用延迟加载的 DLL,以支持具有不同可用功能的不同版本的 DLL。
如果我的目标是 Windows 10 及更高版本,我可以使用函数
QueryOptionalDelayLoadedAPI
来判断某个函数是否可用。不幸的是,我还需要以 Windows 7 为目标,而 QueryOptionalDelayLoadedAPI
在那里不可用。
我可以使用什么方法来检测在 Windows 7 中可用的延迟加载函数?
编辑:为了清楚起见,我需要检查该函数是否可用而不尝试调用它。
在没有实际调用该函数的情况下,在这种情况下唯一的选择是通过
LoadLibrary/Ex()
将 DLL 加载到内存中,然后使用 GetProcAddress()
获取指向所需函数的指针。如果任一失败,则该功能不可用。如果两者都成功,您将拥有一个指针,您可以根据需要使用该指针调用该函数。
这本质上是延迟加载机制在内部执行的所有操作(除了通知挂钩之外)。