如何从 DLL 修改 DLL 中的资源?
我正在使用 VC++ 和 ATL 为 IE 编写一个附加组件。 这是一个简单的 DLL,我有一个用作资源的文本文件。 这个答案帮助我做到了这一点。
我有一个关于更新资源的问题。 MSDN 介绍了如何执行此操作,但有一个函数 (BeginUpdateResource< /a>) 需要带有资源的 exe 或 dll 文件名。
是否可以从我的 DLL 更新我的 DLL 中的资源?我可以轻松地以这种方式阅读它,但要更新我必须提供 DLL 的名称。有必要吗?
另外,如果我不提供 DLL 的完整路径,它会在桌面上查找文件,而不是 DLL 存储的位置。我不知道为什么会有这样的行为。
I'm writing an add-on for IE using VC++ and ATL.
It's a simple DLL and I have a text file that I use as a resource. This answer helped me in doing this.
I have a question about updating resource. MSDN describes how to do it but there is a function (BeginUpdateResource) that need filename of exe or dll with resource.
Is it possible to update resource in my DLL from my DLL? I can easily read it that way, but to update I have to provide DLL's name. Is it necessary?
Also if I won't give full path to my DLL it looks for file on desktop and not where DLL is stored. I don't know why this behave like this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我从未尝试过这样做,所以我可能是错的,但如果 DLL 可以更新自己的资源,我会感到惊讶。如果加载了 DLL 文件,那么我希望包含该 DLL 的文件被锁定,对该文件的读取和写入尝试都会失败。
不过,如果您想尝试,只需让 DLL 将其自己的路径传递给该函数即可。
您可以使用 GetModuleFileName 通过传递 DLL 的 HINSTANCE / HMODULE (现在它们是相同的东西)作为第一个参数。 HINSTNACE / HMODULE 在 DllMain 中传递给您。
I have never tried to do this so I might be wrong, but I would be surprised if a DLL could update its own resources. If the DLL file is loaded then I would expect the file containing the DLL to be locked for reading and for write attempts to that file to fail.
Still, if you want to try, just have the DLL pass its own path to the function.
You can get your DLL's path using GetModuleFileName by passing your DLL's HINSTANCE / HMODULE (they are the same thing these days) as the first argument. The HINSTNACE / HMODULE is passed to you in DllMain.