Localizando e carregando recursos
Antes de usar um recurso, um aplicativo deve carregá-lo na memória. As funções FindResource e FindResourceEx encontram um recurso em um módulo e retornam um identificador para os dados de recurso binário. FindResource localiza um recurso por tipo e nome. FindResourceEx localiza o recurso por tipo, nome e idioma. As informações sobre FindResource neste tópico também se aplicam a FindResourceEx.
A função LoadResource usa o identificador de recurso retornado por FindResource para carregar o recurso na memória. Depois que um aplicativo carregar um recurso usando LoadResource, o sistema descarregará a memória associada somente quando todas as referências ao módulo forem liberadas por meio do FreeLibrary. Aplicativos que precisam acessar repetidamente os mesmos ou muitos recursos em um módulo específico podem incorrer em penalidades de desempenho devido ao mapeamento de memória que ocorre em chamadas repetidas loadLibrary e FreeLibrary . Os aplicativos devem armazenar um único identificador de módulo até que os recursos não sejam mais necessários e, em seguida, chamar FreeLibrary. Depois que um módulo é descarregado da memória, os identificadores de recurso tornam-se inválidos.
Um aplicativo pode usar FindResource e LoadResource para localizar e carregar qualquer tipo de recurso, mas essas funções devem ser usadas apenas em uma destas situações:
- Quando o aplicativo não pode acessar o recurso usando uma função específica de recurso existente.
- Quando o aplicativo deve acessar o recurso como dados binários para chamadas de função subsequentes.
Sempre que possível, um aplicativo deve usar uma das seguintes funções específicas do recurso para localizar e carregar recursos em uma chamada:
Função | Ação | Para remover o recurso |
---|---|---|
Formatmessage | Carrega e formata uma entrada de tabela de mensagens. | Nenhuma ação necessária. |
LoadAccelerators | Carrega uma tabela de aceleradores. | DestroyAcceleratorTable |
Loadbitmap | Carrega um recurso de bitmap. | DeleteObject |
Loadcursor | Carrega um recurso de cursor. | DestroyCursor |
Loadicon | Carrega um recurso de ícone. | Destroyicon |
Loadimage | Carrega um ícone, cursor ou bitmap. | DestroyIcon, DestroyCursor, DeleteObject |
LoadMenu | Carrega um recurso de menu. | Destroymenu |
Loadstring | Carrega uma entrada de tabela de cadeia de caracteres. | Nenhuma ação necessária. |
Observe as funções de versão na tabela acima. Antes de encerrar, um aplicativo deve liberar a memória ocupada por tabelas de aceleradores, bitmaps, cursores, ícones e menus usando as funções apropriadas.
A memória associada aos recursos carregados por meio de FindResource e LoadResource será liberada assim que o módulo for descarregado por uma chamada para FreeLibrary. Todos os recursos que permanecerem descarregados no encerramento do aplicativo serão liberados automaticamente pelo sistema.