在资源DLL之间切换

时间:2013-01-13 14:40:22

标签: c++ visual-c++ mfc

我正在研究由许多项目组成的MFC解决方案。我的一个项目“App.exe”依赖于其他项目输出dll“SC.dll”。

我通过App项目下的Add Reference选项添加了对其他项目的引用。

我希望“基于选项”通过使用资源dll在语言之间切换。 我有另一个资源项目,它生成阿拉伯语资源“SC_AR.dll”。

我尝试使用基于该选项的LoadLibrary,但它失败了。

  1. “添加引用”方法是错误的吗?
  2. 如果没有,我如何在Dlls之间切换?
  3. 如果是,那么正确的方法是什么?

3 个答案:

答案 0 :(得分:2)

无需引用resource satellite。 MFC使用用户的Windows UI语言和应用程序的文件名搜索附属DLL。要切换到另一个卫星,请调用LoadLibrary(),然后调用AfxSetResourceHandle()。

当然,这假设您正在通过MFC加载所有资源(例如,使用CString :: LoadString而不是LoadResource)。如果直接调用API,则必须明确使用自己的附属DLL句柄。

PS the less said about SetThreadLocale越多越好。

答案 1 :(得分:0)

如果您正在使用MFC,则资源dll将加载到主文件中生成的样板中。 (不能随便记住它)但是搜索LoadResource()。您必须调用LoadLibrary才能将hmodule传递给它。

请注意,如果您正在显示来自多个dll的资源,则必须注意不同资源dll中的对话框。如果你只是简单地交换dll,你就不会有问题。

答案 2 :(得分:0)

由于MFC不支持阿拉伯语,我在dll中创建了一个英语对话框和阿拉伯语对话框。根据Language属性,我将资源ID发送给Dialog的构造函数。 对于任何String我使用LoadString