Recherche et chargement de ressources
Avant d’utiliser une ressource, une application doit la charger en mémoire. Les fonctions FindResource et FindResourceEx recherchent une ressource dans un module et retournent un handle aux données de ressource binaires. FindResource localise une ressource par type et par nom. FindResourceEx localise la ressource par type, nom et langue. Les informations sur FindResource dans cette rubrique s’appliquent également à FindResourceEx.
La fonction LoadResource utilise le handle de ressource retourné par FindResource pour charger la ressource en mémoire. Une fois qu’une application a chargé une ressource à l’aide de LoadResource, le système décharge la mémoire associée uniquement lorsque toutes les références à son module sont libérées via FreeLibrary. Les applications qui ont besoin d’accéder de façon répétée à la même ou à plusieurs ressources dans un module particulier peuvent entraîner des pénalités de performances en raison du mappage de mémoire effectué dans des appels LoadLibrary et FreeLibrary répétés . Les applications doivent stocker un handle de module unique jusqu’à ce que les ressources ne soient plus nécessaires, puis appeler FreeLibrary. Une fois qu’un module est déchargé de la mémoire, les descripteurs de ressources ne sont plus valides.
Une application peut utiliser FindResource et LoadResource pour rechercher et charger n’importe quel type de ressource, mais ces fonctions ne doivent être utilisées que dans l’une des situations suivantes :
- Lorsque l’application ne peut pas accéder à la ressource à l’aide d’une fonction existante spécifique à la ressource.
- Lorsque l’application doit accéder à la ressource en tant que données binaires pour les appels de fonction suivants.
Dans la mesure du possible, une application doit plutôt utiliser l’une des fonctions spécifiques aux ressources suivantes pour rechercher et charger des ressources en un seul appel :
Fonction | Action | Pour supprimer une ressource |
---|---|---|
FormatMessage | Charge et met en forme une entrée de table de messages. | Aucune action n'est nécessaire. |
LoadAccelerators | Charge une table d’accélérateurs. | DestroyAcceleratorTable |
LoadBitmap | Charge une ressource bitmap. | DeleteObject |
LoadCursor | Charge une ressource de curseur. | DestroyCursor |
LoadIcon | Charge une ressource icône. | DestroyIcon |
LoadImage | Charge une icône, un curseur ou une bitmap. | DestroyIcon, DestroyCursor, DeleteObject |
LoadMenu | Charge une ressource de menu. | DestroyMenu |
LoadString | Charge une entrée de table de chaînes. | Aucune action n'est nécessaire. |
Notez les fonctions de mise en production dans le tableau ci-dessus. Avant de se terminer, une application doit libérer la mémoire occupée par les tables d’accélérateur, les bitmaps, les curseurs, les icônes et les menus à l’aide des fonctions appropriées.
La mémoire associée aux ressources chargées via FindResource et LoadResource sera libérée une fois le module déchargé par un appel à FreeLibrary. Toutes les ressources qui restent déchargées à l’arrêt de l’application sont automatiquement libérées par le système.