2013-01-13 59 views
0

我正在研究由许多项目组成的MFC解决方案。我的一个项目“App.exe”取决于其他项目输出DLL“SC.dll”。在资源之间切换DLL

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

我想通过使用资源dll来“基于选项”切换语言。 我有另一个资源项目,产生阿拉伯资源“SC_AR.dll”。

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

  1. 就是“添加引用”的方法是错误的?
  2. 如果不是,我该如何在Dll之间切换?
  3. 如果是,那么正确的方法是什么?
+0

没有微软[如何为MFC应用程序创建本地化的资源DLL]任何字符串(http://support.microsoft.com/kb/198846)? – Turbot

+0

是的,它有。但是,这不适用于我的情况。 作为 >> 1-我正在使用从我添加引用提到的应用程序的助手DLL。 >> 2-我想本地化助手Dll本身。我不使用LoadLibrary。 >> 3-我创建了本地化项目,我想根据选项在它们之间切换。 –

回答

0

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

0

如果您使用的是MFC,那么资源dll会加载到主文件中生成的样板文件中。 (不能记住它),但搜索LoadResource()。你将不得不调用LoadLibrary来让hmodule通过它。

要知道,如果你从几个dll文件显示资源,你必须要小心,在不同的资源DLL对话框。如果你只是交换dll,你就不会有问题。

+0

我调用LoadLibrary为其提供Dll名称,但返回NULL。 请注意,我不使用LoadLibrary作为英文DLL,我只是添加了对它的引用。

2

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

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

PS the less said about SetThreadLocale越好。

+0

这是正确的,但不适用于嵌套资源加载。在加载主应用程序资源之后,我需要设置另一个不加载并导致卸载主要exe资源的Dll资源。 –