한 걸음 한 걸음 너에게 VC 순수 자원 dll로 국제화 문제를 해결하는 것을 가르쳐 준다

한 걸음 한 걸음 가르쳐줄게 VC 순자원 dll로 국제화 문제 해결
한 걸음 한 걸음 너에게 VC 순수자원 dll로 국제화 문제를 해결하는 것을 가르쳐 주었다. 이것은 정말 옛말이다. 왜냐하면 이 안에 기술적 함량이 확실히 없기 때문이다. 단지 실현하기가 좀 번거롭기 때문이다. 그러나 나는 이 방면을 막 접한 동료들이 너무 많은 시행착오를 겪지 않기를 바란다.MFC 응용 프로그램도 자신의 자원 파일이 있기 때문에 MFC 함수, 예를 들어 Cstring::LoadString 또는 다른 LoadIcon을 호출할 때 MFC 응용 프로그램 프레임워크는 먼저 EXE 파일의 자원을 추적하고 그 다음에 DLL과 MFC의 자원을 추적한다. 따라서 순수한 자원 DLL을 사용할 때 자원의 검색 순서를 인위적으로 바꿔야 한다. AfxSetourceHandle 함수를 사용하여 구체적으로 다음과 같이 실현할 수 있다.
BOOL CMultilanguageApp::InitInstance()
{
	AfxEnableControlContainer();
	
	if (m_bChinese)
	{
		m_hLangDLL=::LoadLibrary("chinese.dll");
	}
	else
	{
		m_hLangDLL=::LoadLibrary("english.dll");
	}
	
	AfxSetResourceHandle(m_hLangDLL);
	
	……
}

다음은 구체적인 실현 절차를 이야기하기 시작한다.
1. 메인 프로젝트 만들기
단계:
  • Visual Studio 6.0->File->New...-> 실행Projects;Mfc AppWizard(exe)를 선택하고 오른쪽 Project name에 multilanguage를 입력하고 다음에 중국어 지원을 선택하면 됩니다.
  • 프로젝트에서 모든 자원 파일을 옮기고 Resource 패널의 모든 파일을 옮기고 FileView 패널의multilanguage를 옮깁니다.rc,Resource.h, 그리고 Resource Files 아래의 모든 파일을 이동합니다.(설명: 이동한 파일은 실제 파일 디렉터리에서 삭제된 것이 아닙니다)
  • 2. 영어 버전의 DLL을 만들려면 다음과 같이 하십시오.
  • Visual Studio 6.0->File->New...-> 실행Projects;Mfc AppWizard(dll)를 선택하고 오른쪽 Project name에서english를 입력한 다음 Regular Dll Using share MFC DLL을 선택하고Finish를 클릭하면 됩니다.
  • 필요하지 않은 파일 삭제: Resource 패널의 모든 파일을 옮기고FileView 패널의english.rc,Resource.h, 그리고 Resource Files 아래의 모든 파일을 이동한 다음 실제 디렉터리에서 삭제할 수 있습니다.
  • 관련 자원 파일 복사:multilanguage 디렉터리에 있는 multilanguage를 복사합니다.rc,Resource.l 파일을english 프로젝트 파일 디렉터리로 복사하고 multilanguage/res의 모든 파일을english/res 디렉터리로 복사해야 합니다. (이렇게 하면 조작이 간단합니다. 물론 필요에 따라 복사한 파일을 선택할 수 있습니다.)
  • 3단계로 복사한 모든 파일을 프로젝트에 추가하기;
  • 모든 중국어 자원 이름을 영문 자원으로 변경하고 지원하는 언어를 "english(U.S.)."프로젝트 메뉴 Setting 대화상자에 있는 Resource 탭의 부족한 문자를 "english(U.S.)"로 변경해야 합니다.Resource 탭에서 미리 정의된 AFXDLL을 제거해야 합니다.이렇게 하면 사용자의 링크 라이브러리는 일반적인 MFC 자원을 포함한다.
  • 그리고 동적 링크 라이브러리를 컴파일하면 OK;

  • 3. 중국어 버전의 DLL을 만드는 구체적인 방법은 영어 버전의 DLL을 만드는 것과 같이 프로젝트 이름을chinese로 변경한다.Project 메뉴에서 Setting... 옵션만 선택합니다.그런 다음 Link 태그 아래의 Project Options에/NOENTRY 옵션을 추가합니다.마지막으로 동적 링크 라이브러리를 컴파일하고 만듭니다.4. multilanguage 프로젝트를 수정하여 CMultilanguageApp 클래스에 다음과 같은 구성원 변수를 추가합니다.
    private:
    BOOL m_bChinese;
    HINSTANCE m_hLangDLL;		

    구조 함수에서 초기화:
    CMultilanguageApp::CMultilanguageApp()
    {
    	m_bChinese = TRUE;
    	m_hLangDLL = NULL;
    }		

    InitInstance() 함수에서 리소스 로드 순서를 수정하려면 다음과 같이 하십시오.
    BOOL CMultilanguageApp::InitInstance()
    {
    	AfxEnableControlContainer();
    
    	if (m_bChinese)
    	{
    		m_hLangDLL=::LoadLibrary("chinese.dll");
    	}
    	else
    	{
    		m_hLangDLL=::LoadLibrary("english.dll");
    	}
    
    	AfxSetResourceHandle(m_hLangDLL);
    
    	……
    }		

    ExitInstance() 함수가 로드된 dll 리소스를 해제하는 것을 잊지 마십시오.
    int CMultilanguageApp::ExitInstance()
    {
    	if(m_hLangDLL)
    		AfxFreeLibrary(m_hLangDLL);
    	return CWinApp::ExitInstance();
    }		

    마지막 컴파일 실행!
    소결
    이상의 방법은 중국어와 영문 소프트웨어 인터페이스를 실현했지만 조금만 확장하면 다중 언어에 대한 지원을 실현하기 쉽다.
    연락처: QQ:36201365
    e-mail:[email protected]

    좋은 웹페이지 즐겨찾기