リソースの検索と読み込み
リソースを使用する前に、アプリケーションでメモリに読み込む必要があります。 FindResource 関数と FindResourceEx 関数は、モジュール内のリソースを検索し、バイナリ リソース データへのハンドルを返します。 FindResource は、種類と名前でリソースを検索します。 FindResourceEx は、種類、名前、言語によってリソースを検索します。 このトピックの FindResource に関する情報は 、FindResourceEx にも適用されます。
LoadResource 関数は、FindResource によって返されるリソース ハンドルを使用して、リソースをメモリに読み込みます。 アプリケーションが LoadResource を使用してリソースを読み込んだ後、システムは、そのモジュールへのすべての参照が FreeLibrary を介して解放された場合にのみ、関連するメモリをアンロードします。 特定のモジュール内の同じリソースまたは多数のリソースに繰り返しアクセスする必要があるアプリケーションでは、 LoadLibrary 呼び出しと FreeLibrary 呼び出しの繰り返しでメモリ マッピングが実行されるため、パフォーマンスが低下する可能性があります。 アプリケーションは、リソースが不要になるまで 1 つのモジュール ハンドルを格納し、 FreeLibrary を呼び出す必要があります。 モジュールがメモリからアンロードされると、リソース ハンドルは無効になります。
アプリケーションは FindResource と LoadResource を使用して任意の種類のリソースを検索および読み込むことができますが、これらの関数は次のいずれかの状況でのみ使用する必要があります。
- アプリケーションが既存のリソース固有の関数を使用してリソースにアクセスできない場合。
- アプリケーションが後続の関数呼び出しのためにバイナリ データとしてリソースにアクセスする必要がある場合。
可能な限り、アプリケーションでは、次のいずれかのリソース固有の関数を使用して、1 回の呼び出しでリソースを検索して読み込む必要があります。
機能 | アクション | リソースを削除するには |
---|---|---|
FormatMessage | メッセージ テーブル エントリを読み込んで書式設定します。 | 対処は必要ありません。 |
LoadAccelerators | アクセラレータ テーブルを読み込みます。 | DestroyAcceleratorTable |
LoadBitmap | ビットマップ リソースを読み込みます。 | DeleteObject |
LoadCursor | カーソル リソースを読み込みます。 | DestroyCursor |
LoadIcon | アイコン リソースを読み込みます。 | DestroyIcon |
Loadimage | アイコン、カーソル、またはビットマップを読み込みます。 | DestroyIcon、 DestroyCursor、 DeleteObject |
LoadMenu | メニュー リソースを読み込みます。 | DestroyMenu |
LoadString | 文字列テーブル エントリを読み込みます。 | 対処は必要ありません。 |
上記の表のリリース関数に注意してください。 終了する前に、アプリケーションは、適切な関数を使用して、アクセラレータ テーブル、ビットマップ、カーソル、アイコン、およびメニューによって占有されているメモリを解放する必要があります。
FindResource と LoadResource を介して読み込まれたリソースに関連付けられているメモリは、モジュールが FreeLibrary の呼び出しによってアンロードされると解放されます。 アプリケーションの終了時にアンロードされたままのリソースは、システムによって自動的に解放されます。