2009-07-23 94 views
3

LoadString()を使用してリソースから文字列をロードするdllに静的関数があります。この関数をdllから呼び出すと、すべて正常に動作します。しかし、私が他のモジュール(activeXコントロール)からこの関数を呼び出すと、エラーERROR_RESOURCE_NAME_NOT_FOUNDでLoadStringが失敗します。 AFX_MANAGE_STATEマクロを試してみましたが、うまくいきませんでした。誰が何がここで問題になる可能性があり、解決策は何かを知っていますか?dllのMFC LoadStringでエラーが発生しました

+1

LoadString()に渡すモジュールハンドルはどれですか? – sharptooth

+0

私は明示的にモジュールハンドルを使用しません。例: CString strTmp; strTmp.LoadString(IDS_TEMP); –

答えて

6

文字列が異なるdllのリソースにある場合は、他のモジュールからリソースハンドルを設定して動作させる必要があります。 AfxSetResourceHandleメソッドを使用してリソースハンドルを設定しようとします。

+0

私はリソースハンドルを使用しません(私はCStringのLoadStringを使用します)。私はそのDLLに属するクラス/関数からLoadStringを呼び出します。そして、私はその機能をactiveXから呼び出します。 –

+0

@Aleksandar:モジュールハンドルをCString :: LoadString()に渡さない限り、現在のモジュール内でのみ検索されます。その周りに方法はありません。 – sharptooth

5

ハンドルをモジュールのインスタンスにLoadStringに渡さないと、デフォルトのリソースハンドルが使用されます。デフォルトのリソースハンドルは、現在のモジュールハンドルに設定されています。したがって、必要な文字列を持つモジュールからLoadStringを呼び出すと、すべて正常に動作します。 LoadStringを他のモジュールから呼び出すと、必要な文字列を見つけることができず、エラーERROR_RESOURCE_NAME_NOT_FOUNDが発生します。あなたはAfxSetResourceHandle関数を呼び出すことによってそれを無効にすることができます。

また、リソースハンドルをLoadStringに渡すことで、リソースを含むモジュールを明示的に選択することもできます。

関連する問題