c++ - 强制资源从非 mfc 应用程序中的 dll 加载的 WTL 方式? (我们使用的是 WTL/ATL,而不是直接的 win32)

标签 c++ winapi resources atl wtl

我发布了 this question以前和现在都加载了本地化字符串(我们使用 LoadString() 获得的字符串),但我还需要从卫星 DLL 加载所有其他资源。

MFC 具有 AfxSetResourceHandle () 调用,但我需要非 MFC 应用程序的等效项?我怀疑我必须在某个地方的初始化代码中设置它,以便我的所有资源都从另一个 DLL 加载。我如何在 WTL(Windows 模板库)上下文中执行此操作?

编辑:

This summarizes our problem .

我们不是直接使用 win32,而是使用 ATL 和 WTL 来处理 Windows 的东西。所以我们不能依赖 MFC 的东西,我们也没有对菜单和对话框资源加载的低级控制。

编辑: 嗯... This seems to have an answer ,但我希望有比这更好的东西。例如 - 类似于 CAppModule 对象中的 GetResourceInstance() 的 SetResourceInstance() 方法。

最佳答案

资源函数(FindResource、LoadResource)将模块句柄作为参数之一。

使用 GetModuleHandleEx 获取 DLL 的模块句柄。

编辑: ATL/WTL 的附加信息。

WTL 在其 Win32 调用中使用 ATL::_AtlBaseModule.GetResourceInstance() 作为模块句柄。有一个 SetResourceInstance 函数,您可以调用它来更改所使用的模块。像这样的东西应该在你的程序开始时起作用:

HMODULE hmod;
::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN, myDllFuncPtr, &hmod);
ATL::_AtlBaseModule.SetResourceInstance(hmod);

关于c++ - 强制资源从非 mfc 应用程序中的 dll 加载的 WTL 方式? (我们使用的是 WTL/ATL,而不是直接的 win32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341850/

相关文章:

c++ - 在 makefile 中创建一个库文件,然后编译

c++ - C++ 新手,需要有用的示例

android - 应用程序无法从本地化文件夹读取字符串

c++ - sql 选择顺序的强制转换规范的字符值无效

c++ - MinGW 下 windows 中的 Protobuf

c++ - 3D 模型文件并从中创建三角形网格

c++ - 如何检索 SID 的字节数组

c++ - 丰富的编辑控件中鼠标滚轮滚动缓慢/缓慢。如何解决这个问题?

c++ - 无论用户安装或使用什么布局,如何使 SendInput 使用固定(en-US)布局?

c++ - 在 C++ 中拥有字符串资源有什么意义?