我有自定义二进制资源(动画游标),它们想要作为资源存储在Visual Studio C++中的静态库中.事实证明,自定义二进制资源不会被:: LoadCursor()加载,也不会被:: FindResource()找到(如果它是自定义资源和静态库).
这个问题 提供了一些解决方法.
根据它的建议,如果我将*.res文件作为"配置属性 - >链接器 - >附加依赖"添加到exe,那么静态库将能够找到该资源.
但是,如果静态库是dll的一部分,并且我将其作为附加依赖项链接,则不会再次找到它!
如何链接dll中的资源?
或者只是在静态库中找到二进制文件?问题中的方法非常麻烦.
可能重复:
如何获取当前正在执行的代码的HMODULE?
我正在尝试在自己的模块中找到资源.如果这个模块是一个可执行文件,那很简单 - GetModuleHandle(NULL)
返回"main"模块的句柄.
但是,我的模块是由另一个可执行文件加载的DLL.所以GetModuleHandle(NULL)
将模块句柄返回到该可执行文件,这显然不是我想要的.
有没有办法确定包含当前运行代码的模块的模块句柄?在调用中使用DLL的名称GetModuleHandle()
对我来说似乎是一个黑客(如果有问题的代码被移植到不同的DLL中,则不易维护).
我没什么问题.我已经将DLL加载到进程中(它不是我的),我必须在其中使用函数.我有这个功能的偏移,所以我只需要获取DLL地址并将其添加到偏移量以获得该功能.GetModuleHandle()
返回HMODULE
变量,但实际上我不知道是什么HMODULE
.它是加载DLL的地址还是某种其他标记?
如果它不是加载DLL的地址,我怎么能得到这个地址?我希望我能说清楚.
此问题询问如何检索包含当前执行代码的DLL的句柄.其中一个答案中的链接建议将地址作为模块句柄.这适合我.__ImageBase
我的问题是:鉴于检索当前模块的句柄非常简单,为什么像MFC(甚至我继承的代码库)这样的框架通常会存储传递给DllMain()
某个全局变量的实例句柄?有理由不依赖__ImageBase
吗?
编辑:根据Raymond Chen的说法,__ImageBase
仅适用于微软链接器.还有另一个问题有更精确的答案,包括使用链接器无关的方式GetModuleHandleEx()
.还有一个Win2000和早期使用的解决方案VirtualQuery()
.问题仍然有效:为什么在可以轻松检索基地址时保存它?