리소스 찾기 및 로드
리소스를 사용하기 전에 애플리케이션은 리소스를 메모리에 로드해야 합니다. FindResource 및 FindResourceEx 함수는 모듈에서 리소스를 찾고 핸들을 이진 리소스 데이터에 반환합니다. FindResource 는 형식 및 이름별로 리소스를 찾습니다. FindResourceEx 는 형식, 이름 및 언어별로 리소스를 찾습니다. 이 항목의 FindResource 에 대한 정보는 FindResourceEx에도 적용됩니다.
LoadResource 함수는 FindResource에서 반환된 리소스 핸들을 사용하여 리소스를 메모리에 로드합니다. 애플리케이션이 LoadResource를 사용하여 리소스를 로드한 후 시스템은 해당 모듈에 대한 모든 참조가 FreeLibrary를 통해 해제된 경우에만 연결된 메모리를 언로드합니다. 특정 모듈 내에서 동일하거나 많은 리소스에 반복적으로 액세스해야 하는 애플리케이션은 반복 된 LoadLibrary 및 FreeLibrary 호출에서 발생하는 메모리 매핑으로 인해 성능 저하가 발생할 수 있습니다. 애플리케이션은 리소스가 더 이상 필요하지 않을 때까지 단일 모듈 핸들을 저장한 다음 FreeLibrary를 호출해야 합니다. 메모리에서 모듈을 언로드하면 리소스 핸들이 잘못됩니다.
애플리케이션 은 FindResource 및 LoadResource 를 사용하여 모든 유형의 리소스를 찾고 로드할 수 있지만 이러한 함수는 다음 상황 중 하나에서만 사용해야 합니다.
- 애플리케이션이 기존 리소스 관련 함수를 사용하여 리소스에 액세스할 수 없는 경우
- 애플리케이션이 후속 함수 호출에 대한 이진 데이터로 리소스에 액세스해야 하는 경우
가능하면 애플리케이션은 다음 리소스별 함수 중 하나를 사용하여 한 번의 호출에서 리소스를 찾고 로드해야 합니다.
함수 | 작업 | 리소스를 제거하려면 |
---|---|---|
FormatMessage | 메시지 테이블 항목을 로드하고 형식을 지정합니다. | 어떤 조치도 필요하지 않습니다. |
LoadAccelerators | 가속기 테이블을 로드합니다. | DestroyAcceleratorTable |
LoadBitmap | 비트맵 리소스를 로드합니다. | DeleteObject |
LoadCursor | 커서 리소스를 로드합니다. | DestroyCursor |
LoadIcon | 아이콘 리소스를 로드합니다. | DestroyIcon |
Loadimage | 아이콘, 커서 또는 비트맵을 로드합니다. | DestroyIcon, DestroyCursor, DeleteObject |
LoadMenu | 메뉴 리소스를 로드합니다. | DestroyMenu |
LoadString | 문자열 테이블 항목을 로드합니다. | 어떤 조치도 필요하지 않습니다. |
위의 표에서 릴리스 함수를 확인합니다. 종료하기 전에 애플리케이션은 적절한 함수를 사용하여 가속기 테이블, 비트맵, 커서, 아이콘 및 메뉴가 차지하는 메모리를 해제해야 합니다.
FindResource 및 LoadResource를 통해 로드된 리소스와 연결된 메모리는 FreeLibrary 호출로 모듈이 언로드되면 해제됩니다. 애플리케이션 종료 시 언로드된 상태로 유지되는 모든 리소스는 시스템에서 자동으로 해제됩니다.