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

时间:2017-01-22 11:01:21

标签: c++ windows dll embedded-resource loadlibrary

背景

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

加载和运行的DLL

动机

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

尝试

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

此外,我已阅读Can you get the caller DLL or executable module from the callee

问题(TL; DR)

所以,如果上面描述的approch是正确的,那么, 如何使用DLL获取调用者模块HMODULE

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

我认为下面的插图将为那些感到困惑的人提供一些启示。

enter image description here