gpt4 book ai didi

c++ - 显式加载库的干净方式

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:56 30 4
gpt4 key购买 nike

我正在寻找一种干净的方式来显式加载库。大多数情况下,我有一对 LIB 和 DLL,因此 LIB 将处理所有“加载内容”,我可以直接调用 dll 中的函数。明确执行此操作时,我需要执行以下操作:

HMODULE libA = LoadLibrary("dllA.dll"); // NULL if load failed
HMODULE libB = LoadLibrary("dllB.dll"); // NULL if load failed

void (*functionA)(void) = libA ? GetProcAddress(libA,"functionA"):NULL;
void (*functionB)(void) = libB ? GetProcAddress(libB,"functionB"):NULL;

当我需要在DLL中调用函数时,如果在我的代码中到处都是LoadLibrary()和GetProcAddress(),那将是一团糟。我想知道是否有一种干净的方法可以让我在 1-2 个文件中编写所有处理并调用函数,就像我通过 LIB 和 DLL 对隐式加载库一样。

最佳答案

确实有一种方法可以获得所有隐式链接的便利性,同时仍然能够优雅地处理库加载和符号查找失败。 Visual Studio 提供 Linker Support for Delay-Loaded DLLs ,这使用户代码能够 Hook 到加载程序,并为不可用的符号实现任意恢复策略(例如,通过返回无操作 stub )。这使得将所有故障处理整合到一个地方成为可能。

关于c++ - 显式加载库的干净方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46949307/

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