2012-02-23 28 views
0

言語リソースを保持するサテライトdllをロードしています。しかし、私は文字列をdllに保存するだけで、ダイアログリソースは保存しません。問題は、私は以下のようになりましたCTestDlgを持っている場合、それが立ち上がったことがないですdllではなくexeからリソースをロードする方法

hInst = LoadLibrary(_T("MyAppFRA.dll")); 
if (hInst!= NULL) 
    AfxSetResourceHandle(hInst); 

:以下のように私は、DLLをロードします。

CTestDlg dlg; 
dlg.DoModal() 

それは、ダイアログリソースIDD_DIALOG1は、exeファイルに存在するためであるが、いないDLL内でDoModalので、()(AfxSetResourceHandle()呼び出しの結果として。)それを見つけるように見えることはできません。これは意図的なものです、私は思いましたDLLでリソースを見つけられなかった場合、自動的にexeで検索されますが、そうではないようです。

残りのリソースがDLLにある場合、exeリソースからダイアログをロードできますか?

+0

ダイアログにはテキストは含まれていませんか?なぜ彼らも翻訳されませんでしたか? –

+0

@ MarkRansom彼らは、OnInitDialog()の現在のリソースハンドルからテキストをロードします。この方法で私のダイアログリソースは共有され、テキストのみが翻訳されます。 – zar

+0

単語が英語よりも長くても短くてもレイアウトが変更されることがあります。しかし、それがあなたのために働くなら、私は不平を言うことはありません。 –

答えて

0

私たちにはリソースが溢れています。 MFCがリソースを探す場所のコンテキストを変更する場合はいつでも、AfxSetResourceHandle()を使用できます。私たちには、リソースハンドルを設定して復元できるスタックベースのオブジェクトがあります。 AfxGetResourceHandle()は、現在の値を取得する関数です。

+0

これは、あなたのOnInitDialogの内部でAfxSetResourceHandleを呼び出す場合に有効です。 –

+0

@ MarkRansomこれは、文脈を前後に変更しなければならないことを意味し、これは望ましくない種類の多くの場所になります。私は[これは](http://msdn.microsoft.com/en-us/library/8fkteez0%28vs.71%29.aspx)Microsoftが「MFCがサテライトDLLを見つけられない場合は、リソースはアプリケーション自体に含まれています。しかし、私は強調しているのは、「dllの中のリソースではなく、衛星dllを見つけられない」ということだと私の解釈は間違っていた。 – zar

+0

さて、元の質問をもう一度読みました... LoadLibrary()を使用して手動でDLLを読み込んでいることがわかります。 AfxSetResourceHandle()は、MFC拡張ライブラリで動作するように設計されています。 DLLを拡張ライブラリとしてビルドしましたか?これにより、MFCがDLLリソースをどのように通過するかが異なります。 DLLを拡張ライブラリとしてセットアップした場合、リソースの大きな問題はリソースを見つけることができなくなるのではなく、重複します。任意のリソースが重複していない場合は、MFCがすべて正常に見つかるため、AfxSetResourceHandle()を呼び出す心配はありません。 –

0

.exeリソースからダイアログテンプレートをロードしてから、InitModalIndirectを呼び出してダイアログオブジェクトに結びつけることができます。 DoModalは、現在のリソースハンドルからリソースをロードしようとするのではなく、このリソースを使用します。

関連する問題