2013-01-13 102 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資源。 –