使用MFC在不改变GUI的情况下动态读取卫星DLL
所以我有一个MFC应用程序,它在几个卫星DLL文件中有语言资源 当程序启动时,它加载正确的DLL并为应用程序资源设置它 我的问题是,是否可以在不将其设置为GUI的情况下从DLL读取STRINGTABLE条目?例如,我正在用意大利语运行应用程序,但出于某些原因,我希望允许该节目用西班牙语显示一些信息 我们可以访问卫星DLL的STRINGTABLE而不将其设置为应用程序GUI吗?使用使用MFC在不改变GUI的情况下动态读取卫星DLL,mfc,Mfc,所以我有一个MFC应用程序,它在几个卫星DLL文件中有语言资源 当程序启动时,它加载正确的DLL并为应用程序资源设置它 我的问题是,是否可以在不将其设置为GUI的情况下从DLL读取STRINGTABLE条目?例如,我正在用意大利语运行应用程序,但出于某些原因,我希望允许该节目用西班牙语显示一些信息 我们可以访问卫星DLL的STRINGTABLE而不将其设置为应用程序GUI吗?使用 或 CString::LoadString(HINSTANCE-HINSTANCE、UINT-nID、WORD-wL
或
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\u STRING100)
。例如:
AfxSetResourceHandle(hinst);
str.LoadString(ID_STRING100);
...
//reset resource handle:
AfxSetResourceHandle(AfxGetInstanceHandle());
谢谢但是如果我使用AfxSet。。。那么,它不会立即更改GUI界面吗?我会尝试你的第一个建议。我正在尝试找到MSDN的参考。我可以看到LoadString接受HINSTANCE,但它似乎是一个Win32 API调用,而不是CString派生。我添加了链接。如果使用
AfxSetResourceHandle
在查看自己的dll之前必须重置句柄。HINSTANCE和HMODULE是一样的。很多很多很多年以前,在一个遥远的星系里,他们是不同的。但是,它们现在是一样的。Raymond Chen:使用AfxGetInstanceHandle()
获取主GUI进程的HINSTANCE
。我不知道你用的是哪种方法,也许你可以编辑你的问题并展示出来。