DLL 可以通过调用 EXE 加载资源吗?

Can a DLL load a resource from calling EXE?

背景

我有两个 C++ 项目。一个 EXE 和一个 DLL。 EXE 加载 DLL 并调用其单个导出函数。 最终,我将生成更多将由 EXE

加载和 运行 的 DLL

动机

EXE 和所有 DLL 将使用一些资源。因此,我不想将资源添加到所有 DLL,而是一次将其添加到 EXE,并希望 DLL 从调用者 EXE 加载资源。

尝试

我已经知道如何使用以下方法加载我自己的资源:FindResource(), LoadResource(), LockResource()。我所缺少的只是调用者进程的 hModule

此外我还阅读了

问题 (TL;DR)

所以,如果我上面描述的方法是正确的,那么, 如何使用 DLL 获取调用程序模块的 HMODULE

您可以调用::GetModuleHandle(NULL) 获取调用exe 的句柄,然后将其传递给FindResource 或其他相关函数。

但是,我不会推荐它,因为你会损害模块的可重用性。

如果您的 dll 导出有用且可能可重用的功能,并且在不久的将来您需要另一个引用相同 dll 的可执行文件,则您将不得不在第二个 exe 中复制 dll 的资源。

对资源加载的工作原理理解不佳导致我提出这个问题。

我认为下面的插图可以为那些像我一样are/were感到困惑的人提供一些启示。