0

私は、多くのプロジェクトで構成される MFC ソリューションに取り組んでいます。私のプロジェクト「App.exe」の1つは、他のプロジェクト出力DLL「SC.dll」に依存しています。

App プロジェクトの下の [参照の追加] オプションを使用して、他のプロジェクトへの参照を追加しました。

リソースdllを使用して、「オプションに基づいて」言語を切り替えたい。アラビア語のリソース「SC_AR.dll」を生成する別のリソース プロジェクトがあります。

オプションに基づいて LoadLibrary を使用しようとしましたが、失敗しました。

  1. 「参照の追加」アプローチは間違っていますか?
  2. そうでない場合、どうすれば Dll を切り替えることができますか?
  3. はいの場合、従うべき正しいアプローチは何ですか?
4

3 に答える 3

2

リソース サテライトを参照する必要はありません。MFC は、ユーザーの Windows UI 言語とアプリケーションのファイル名を使用してサテライト DLL を検索します。別のサテライトに切り替えるには、LoadLibrary() を呼び出してから、AfxSetResourceHandle() を呼び出します。

もちろん、これは MFC 経由ですべてのリソースをロードしていることを前提としています (たとえば、 LoadResource の代わりに CString::LoadString を使用します)。API を直接呼び出す場合は、独自のサテライト DLL ハンドルを明示的に使用する必要があります。

PS SetThreadLocaleについてはあまり言わないほうがいいです。

于 2013-01-13T19:26:06.840 に答える
0

MFC はアラビア語をサポートしていないので、dll 内に英語のダイアログとアラビア語のダイアログを作成しました。そして、Language プロパティに従って、リソース ID を Dialog のコンストラクターに送信します。そして、任意の文字列に対して LoadString を使用します

于 2013-01-17T13:54:59.723 に答える
0

MFC を使用している場合、リソース dll は、メイン ファイルで生成されたボイラープレートに読み込まれます。(すぐに思い出すことはできません)が、LoadResource()を検索してください。hmodule をこれに渡すには、LoadLibrary を呼び出す必要があります。

複数の dll からリソースを表示している場合は、別のリソース dll のダイアログに注意する必要があることに注意してください。単に dll を交換するだけであれば、問題はありません。

于 2013-01-13T14:49:08.257 に答える