首页 > 解决方案 > 使用 MFC 在不更改 GUI 的情况下动态读取卫星 DLL

问题描述

所以我有一个 MFC 应用程序,它在几个卫星 DLL 文件中有语言资源。

当程序启动时,它会加载正确的 DLL 并将其设置为应用程序资源。

我的问题是,是否可以在不将其设置为 GUI 的情况下从 DLL 中读取 STRINGTABLE 条目?例如,我正在以意大利语运行应用程序,但出于某种原因,我想让节目以西班牙语显示一些信息。

我们可以在不将其设置为应用程序 GUI 的情况下访问卫星 DLL 的 STRINGTABLE 吗?

标签: mfc

解决方案


使用
CString::LoadString(HINSTANCE hInstance, UINT nID)
CString::LoadString(HINSTANCE hInstance, UINT nID, WORD wLanguageID)

例子:

HINSTANCE hinst = LoadLibrary(L"path.dll");

CString str;
if (str.LoadString(hinst, ID_STRING100))
    AfxMessageBox(str);

您也可以致电AfxSetResourceHandle(hinst)并简单地跟进str.LoadString(ID_STRING100)。例子:

AfxSetResourceHandle(hinst);
str.LoadString(ID_STRING100);
...

//reset resource handle:
AfxSetResourceHandle(AfxGetInstanceHandle());

推荐阅读