我正在研究由许多项目组成的 MFC 解决方案。我的一个项目“App.exe”依赖于其他项目输出 dll “SC.dll”。
我通过 App 项目下的 Add Reference 选项添加了对另一个项目的引用。
我想通过使用资源 dll 在语言之间“基于选项”切换。我有另一个资源项目,它产生阿拉伯语资源“SC_AR.dll”。
我尝试根据选项使用 LoadLibrary,但失败了。
- “添加参考”的方法是错误的吗?
- 如果没有,我如何在 Dll 之间切换?
- 如果是,那么正确的做法是什么?
我正在研究由许多项目组成的 MFC 解决方案。我的一个项目“App.exe”依赖于其他项目输出 dll “SC.dll”。
我通过 App 项目下的 Add Reference 选项添加了对另一个项目的引用。
我想通过使用资源 dll 在语言之间“基于选项”切换。我有另一个资源项目,它产生阿拉伯语资源“SC_AR.dll”。
我尝试根据选项使用 LoadLibrary,但失败了。
无需参考资源卫星。MFC 使用用户的 Windows UI 语言和应用程序的文件名搜索附属 DLL。要切换到另一个卫星,请调用 LoadLibrary(),然后调用 AfxSetResourceHandle()。
当然,这是假设您通过 MFC 加载所有资源(例如,使用 CString::LoadString 而不是 LoadResource )。如果直接调用 API,则必须显式使用自己的附属 DLL 句柄。
PS关于 SetThreadLocale的说法越少越好。
如果您使用的是 MFC,则资源 dll 将加载到主文件中生成的样板文件中。(不能随便记住它)但搜索 LoadResource()。您必须调用 LoadLibrary 才能让 hmodule 传递给它。
请注意,如果您要显示来自多个 dll 的资源,则必须小心不同资源 dll 中的对话框。如果您只是交换 dll,则不会有问题。
由于 MFC 不支持阿拉伯语,我在 dll 中制作了一个英文对话框和一个阿拉伯语对话框。并根据 Language 属性将资源 ID 发送给 Dialog 的构造函数。对于任何字符串,我使用 LoadString