다음을 통해 공유


리소스 찾기 및 로드

리소스를 사용하기 전에 애플리케이션은 리소스를 메모리에 로드해야 합니다. FindResourceFindResourceEx 함수는 모듈에서 리소스를 찾고 핸들을 이진 리소스 데이터에 반환합니다. FindResource 는 형식 및 이름별로 리소스를 찾습니다. FindResourceEx 는 형식, 이름 및 언어별로 리소스를 찾습니다. 이 항목의 FindResource 에 대한 정보는 FindResourceEx에도 적용됩니다.

LoadResource 함수는 FindResource에서 반환된 리소스 핸들을 사용하여 리소스를 메모리에 로드합니다. 애플리케이션이 LoadResource를 사용하여 리소스를 로드한 후 시스템은 해당 모듈에 대한 모든 참조가 FreeLibrary를 통해 해제된 경우에만 연결된 메모리를 언로드합니다. 특정 모듈 내에서 동일하거나 많은 리소스에 반복적으로 액세스해야 하는 애플리케이션은 반복 된 LoadLibraryFreeLibrary 호출에서 발생하는 메모리 매핑으로 인해 성능 저하가 발생할 수 있습니다. 애플리케이션은 리소스가 더 이상 필요하지 않을 때까지 단일 모듈 핸들을 저장한 다음 FreeLibrary를 호출해야 합니다. 메모리에서 모듈을 언로드하면 리소스 핸들이 잘못됩니다.

애플리케이션 은 FindResourceLoadResource 를 사용하여 모든 유형의 리소스를 찾고 로드할 수 있지만 이러한 함수는 다음 상황 중 하나에서만 사용해야 합니다.

  • 애플리케이션이 기존 리소스 관련 함수를 사용하여 리소스에 액세스할 수 없는 경우
  • 애플리케이션이 후속 함수 호출에 대한 이진 데이터로 리소스에 액세스해야 하는 경우

가능하면 애플리케이션은 다음 리소스별 함수 중 하나를 사용하여 한 번의 호출에서 리소스를 찾고 로드해야 합니다.

함수 작업 리소스를 제거하려면
FormatMessage 메시지 테이블 항목을 로드하고 형식을 지정합니다. 어떤 조치도 필요하지 않습니다.
LoadAccelerators 가속기 테이블을 로드합니다. DestroyAcceleratorTable
LoadBitmap 비트맵 리소스를 로드합니다. DeleteObject
LoadCursor 커서 리소스를 로드합니다. DestroyCursor
LoadIcon 아이콘 리소스를 로드합니다. DestroyIcon
Loadimage 아이콘, 커서 또는 비트맵을 로드합니다. DestroyIcon, DestroyCursor, DeleteObject
LoadMenu 메뉴 리소스를 로드합니다. DestroyMenu
LoadString 문자열 테이블 항목을 로드합니다. 어떤 조치도 필요하지 않습니다.

 

위의 표에서 릴리스 함수를 확인합니다. 종료하기 전에 애플리케이션은 적절한 함수를 사용하여 가속기 테이블, 비트맵, 커서, 아이콘 및 메뉴가 차지하는 메모리를 해제해야 합니다.

FindResourceLoadResource를 통해 로드된 리소스와 연결된 메모리는 FreeLibrary 호출로 모듈이 언로드되면 해제됩니다. 애플리케이션 종료 시 언로드된 상태로 유지되는 모든 리소스는 시스템에서 자동으로 해제됩니다.