1. Basis
- Application에서 사용하는 Resource(String, Icon, Bitmap 등)을 Application에서 분리시켜 DLL에 포함하여 사용할 목적으로 이용된다.
- 단지 DLL Main 함수만을 가지며, 별도의 Export 함수를 가지지 않는다.
- DLL은 Non-MFC DLL로 작성될 수 있으며, Client는 Windows API를 직접 사용할 수 있는 모든 Language로 구현 가능하다.
- 작성된 Resource는 Export될 필요가 없다. 단지 모듈내에 Resource를 저장할 뿐이다.
Resource DLL은 별도의 Export함수가 없으므로, 별도의 Library File도 지원되지 않는다. 따라서 Resource를 Import할 Client는 “LoadLibrary” 함수를 통한 Explicit Link만 사용가능하다. 그대신, DLL은 각 Resource를 구별할 수 있는 Resource ID를 별도의 Header File로 제공하여야 한다. Client는 이 Resource ID를 이용하여 적절한 Resource를 추출한다. 일단 “LoadLibrary” 함수를 통하여 DLL의 Handle을 얻고 나면, 각 Resource의 추출은 Instance Handle로부터 Resource를 Load하는 일련의 함수를 통하여 이루어 질 수 있다. “LoadString”, “LoadIcon”, “LoadBitmap” 등의 함수가 Instance로부터 각 Resource를 추출한다. 이 모든 함수들은 Resource의 ID만 알고 있으면 언제든지 사용가능하다. 따라서 아래와 같은 방법으로 Resource를 추출한다.
HINSTANCE hDllInst = LoadLibrary(“ResourceDll.dll”);
char szStr[128];
::LoadString(hDllInst, nID, szStr, 128);
::FreeLibrary(hDllInst);
위와 같이 LoadLibrary로 DLL의 Handle을 구하고 LoadString 등의 Resource Load용 함수를 이용하여 Resource를 얻을 수 있다. 위에서 nID는 Resource ID를 정의하는 Header File에 존재하는 특정 ID값으로 설정될 것이다.
2. Making & Using Resource DLL
Resource DLL은 아래와 같은 순서로 만들어질 수 있다.
- 1.2에서 설명한 Non-MFC DLL과 동일한 방법으로 Project를 생성한다.
- VC의 ResourceView에서 원하는 Resource를 Insert 시킨다.
- Resource를 편집하여 저장한다.
- Resource가 완성되었다면, Build를 통하여 DLL을 생성한다.
- Resource ID를 위한 Header를 작성한다. 각 Resource의 ID는 Resource.h File에 정의 되어 있다. 따라서 이 File에서 Resource ID의 define 부분만을 선택하여 하나의 Header로 작성한다.
- Client는 4.1.2에서 설명한 바대로, Resource ID를 위한 Header를 Include하고 나머지 Resource를 Load하기 위한 처리를 해주면 된다.VC 이외의 Language를 사용하여 Client를 만드는 경우에는, Resource를 Load하기 위한 각 함수는 모두 SDK의 함수이므로, 해당 함수를 정의하여 위와 동일한 방법을 사용하여 Resource를 Load 할 수 있다.
댓글 없음:
댓글 쓰기