Thinking Different





리소스 DLL를 이용해서  프로그램에서 어떻게 로딩하고 사용하는지 간단한 예제를 통해서 설명한다.


1. 먼저 리소스 DLL를 생성한다.  string table을 만들고 3개의 데이터를 입력한 후 컴파일하여 리소스 DLL을 생성한다. (각각 한국어 버전과 영어 버전을 만든다)

 
리소스 DLL 생성 방법을 모른다면
  >>>>>>>>    리소스 DLL 생성 방법 바로가기 



2. 아래와 같이 여러 버전의 dll를 만들고 (필자는 2개 영어, 한국어를 만들었다) 프로그램을 사용할 프로젝트 내에 저장한다.

 


3. 다음과 같이 소스를 입력하고 컴파일 한다.  여기서는 GetUserDefaultUILanguage(); 함수가 가장 중요한 것을 볼 수 있다.  OS의 기본 언어를 반환해주는 함수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int _tmain(int argc, _TCHAR* argv[])
{
    _wsetlocale(LC_ALL, _T("Korean"));
 
    TCHAR strText[MAX_PATH]= {0,};
    HINSTANCE hResourceDll = NULL;
    LANGID CurLangID = 0;
    
    // 현재 설치된 OS의 기본 언어 ID를 구함(2K 버전 이상)
    CurLangID = GetUserDefaultUILanguage();
 
    // 영어 테스트용
//    CurLangID = 0x409;
 
    switch (CurLangID)
    {
    case 0x412:        // 한국어
        hResourceDll = LoadLibrary( _T("lang_kor.dll") );
        _tprintf( _T("현재 할당된 언어는 한국어 입니다\n\n") );
    break;
 
    case 0x409:        // 영어 (미국)
        hResourceDll = LoadLibrary( _T("lang_eng.dll") );
        _tprintf( _T("현재 할당된 언어는 영어 입니다\n\n") );
    break;
 
    // 필요한 언어에 해당되는 리소스 dll를 생성하여 추가 사용
    //case 0x411:        // 일본어
    //case 0x804:        // 중국어 (간체)
    //case 0x404:        // 중국어 (번체)
    //case 0x40C:        // 프랑스어
    }
 
    // dll load error check
    if(hResourceDll == NULL) 
        return -1;
 
    // 리소스 dll의 모든 내용을 출력함 (위 101번부터 103번까지 3개만 입력했음)
    for(int i=101; i<104; i++)
    {
        LoadString( hResourceDll, i, strText, MAX_PATH );
        _tprintf( _T("%s\n"), strText );
    }
 
    // dll 해제
    FreeLibrary( hResourceDll );
 
    getchar();
    return 0;
}


4. 아래는 결과 화면이다. 각각 한국어와 영어를 출력했을때의 커멘드 결과 창 모습