resource dll

4154 단어

resource dll


resource dll
많은 세심한 사람들이 VC의 통합 컴파일 환경 (IDE) 에서 자원을 선택하고, 위에서 마우스 오른쪽 단추를 누르고, Insert Copy를 선택하고, 다른 Condition을 선택할 수 있는 기능이 있다는 것을 알아차렸을 것이다.그러나 나는 VC를 십여 년 동안 사용해 본 적이 없고 그가 무엇을 하는지 몰랐다.며칠 전에 어떤 네티즌이 나에게 이 물건이 무엇이냐고 묻고서야 연구하기로 결심했다.자세히 연구한 후에야 그가 자원 DLL에 쓰인다는 것을 발견하였다.
 
국제화 해결 방안을 제공하는 프로그램 디자이너에게 사용자 지역 설정에 따라 대응하는 언어 인터페이스를 보여주는 것은 매우 의미가 있을 것이다.본고의 목적은 자원 dll을 하지 않은 사람들이 이익을 얻을 수 있도록 step by step에 대한 조언을 제공하는 것이다.나도 자원 dll을 해 본 적이 없기 때문에 이것을 연구하는 데 반나절밖에 걸리지 않기 때문에 만약 무슨 잘못이 있으면 정상이다.잘못된 친구를 발견하면 직접 메일로 보내주세요.당신의 도움에 대해 저는 매우 감사할 것입니다.
 

주 공정의 요구

자원 dll을 사용하여 국제화를 실현해야 하는 프로젝트에 대해 우리는 사용자에게 보여주는 모든 인터페이스 요소가 반드시 자원에서 얻어야 한다고 보장해야 한다.이것은 주로 명목이 많은 문자열을 가리킨다.프로그램 설계자는 AfxMessageBox로 정보를 표시하는 것을 좋아한다.단일 언어 상황에서 이것은 당연히 문제가 없다.그러나 다중 언어 환경이라면 이 디스플레이 정보가 현재 지역 설정과 일치하는 것을 제어하기 어렵다.또한 주 프로젝트의 설계는 자원 dll을 만들기 전에 완성해야 한다.이렇게 하는 이유는 자원 dll 디자인이 매우 간단하고 시간이 얼마 걸리지 않기 때문이다.만약 자원의 수정이 코드에 정확하게 반영되지 않는다면, 때때로 프로그램은 영문도 모른 채 붕괴될 수도 있고, 그 원인을 찾는 데 오랜 시간이 걸릴 수도 있다.나의 한 예는 다음과 같다. 나는 아이콘에 65535색의 그림을 삽입했는데 프로그램이 줄곧 일어나지 못했는데, 나중에 아주 오랫동안 찾다가 비로소 원인을 찾았다.만약에 우리가 일반적인 방식으로 주요 공사를 설계하고 테스트를 통해 그가 정상적으로 일하고 있음을 증명한다면 이때 자원 dll을 다시 하면 두 공사 사이의 디버깅과 원인을 찾는 것을 피할 수 있다.실제로 증량 개발 상황에 대해 이런 자원 dll과 메인 프로젝트가 병존하는 상황은 피하기 어려울 수 있으므로 이때 자원을 증감하고 삭제하는 데 특히 조심해야 오류를 초래하지 않는다.단순화를 위해 다음과 같이 기본 대화상자 프로젝트를 생성하여 테스트를 수행합니다.
  • Microsoft Visual Studio 6.0
  • 시작
  • File, New
  • 클릭
  • Microsoft AppWizard(exe) 프로젝트를 선택하고 프로젝트 이름test를 입력하고 OK
  • 를 클릭한다.
  • Dialog Based를 선택하고 What language would you like your resources in?중국어 선택(이때 내가 가장 좋아하는 언어를 선택하면 된다. 나는 영어에 익숙하지 않아서 중국어를 선택한다)
  • Finish Engineering
  • 클릭

    자원 dll 프로젝트 만들기


    다음 절차에 따라 리소스 DLL을 생성할 수 있습니다.
     
  • 일반적인 WIN32 Dynamic-Link Library 만들기 (여기 이름testdll)
  • 메인 프로젝트의 모든 자원 관련 파일(rc,rc2,ico 등)을 이 dll프로젝트에 추가
  • 메뉴 Build,Configurations를 클릭하면 Release와 Debug 두 가지 설정
  • 이 있어야 합니다.
  • Add 버튼을 클릭하여 Debug를 템플릿으로 DebugEN 및 DebugCN을 만듭니다
  • 상기 절차를 반복하여 Release를 템플릿으로 하고 ReleaseEN 및 ReleaseCN을 생성
  • 원래 Debug 및 Release 구성을 삭제하고 Close를 클릭하여 구성 대화 상자를 종료
  • 조합키 Alt+F7을 누르면 프로젝트 Settings 대화상자
  • 가 팝업됩니다.
  • Resources 페이지 선택
  • 왼쪽 선택 All Configurations
  • Preprocessor Definitions에 다음 매크로 AFX 추가RESOURCE_DLL
  • 왼쪽에서 Multiple Configurations를 선택하고 DebugEN 및 ReleaseEN
  • 을 선택합니다.
  • 10단계 반복, AFX 입력TARG_ENU 매크로(미국 영어로 정의된 매크로 English U.S)
  • 11, 12단계를 반복하여 DebugCN 및 ReleaseCN에 AFX 추가TARG_CHS 매크로(중국어 간체 매크로 Chinese Simplified)
  • 링크 페이지를 선택하고 각 설정에 출력 파일 이름을 지정합니다(여기는testdll end.dll,testdll enr.dll,testdll cnd.dll,testdll cnr.dll로 각각 영어 debug,영문release와 중국어 관련 파일을 표시합니다)
  • Project Settings 대화 상자 닫기
  • Resource View
  • 선택
  • 각 자원 ID를 마우스 오른쪽 버튼으로 클릭하고 Insert Copy를 선택하여 Language를 English(U.S)
  • 로 변경합니다.
  • 같은 언어에 대해 사용자 정의 매크로에 따라 다른 인터페이스 (예를 들어 UI 모드와 서비스 모드) 를 선택하고 싶다면, Condition에 구분할 매크로 이름을 입력하십시오. 예를 들어SERVICEDLL.
  • 새로 만든 모든 자원을 열고 자신의 필요에 따라 자원을 수정합니다(주의: 여기서는 문자, 글씨체만 수정할 것을 권장하며 어떤 자원도 삭제하지 않을 것을 엄격히 보장해야 합니다)
  • 수정 사항 저장
  • 컴파일 리소스 DLL
  • 마스터 엔지니어링 수정


    리소스 dll을 사용하여 리소스 정보를 제공할 계획이므로 기본 프로젝트를 다음과 같이 수정해야 합니다.
  • 프로젝트 열기
  • FileView를 선택하여 rc,rc2,ico 등 자원과 밀접한 관계를 가진 파일을 삭제합니다.resource.h삭제하지 마세요
  • CWinApp에 개인 HMODULE 유형의 변수 m 추가hResource
  • InitInstance 함수의 시작 부분에 다음 코드를 추가합니다.
  •  LANGID id = ::GetUserDefaultLangID();switch (id) {case 0x804:/중국어 #ifdef DEBUG m hResource = LoadLibrry(T는 "D:\projects\testdll\DbugCA\testdllc.dlllll"));;; #else m hReReReReReResource=LoadLibrrrrrrry(T(T T:::::::::::: {{{{{{{{{{{{{{{xxx8044444444444444/////////중국어 중국어 중국어 중국어 중국어 시시시시시fffffffffffLoadLibrary(T("D:\projects\\testdll\DebugEN\testdllend.dll");#else m hResource = LoadLibrary(_T("D:\\projects\\testdll\\ReleaseCN\\testdllenr.dll"));#endif } if(m_hResource == NULL) {   return FALSE; }else{   AfxSetResourceHandle((HINSTANCE)m_hResource); }

    이후에 간단한 디버깅을 좀 더 하면 될 것 같다.구체적인 디버깅은 이미 내가 이 글에서 토론할 수 있는 범위를 넘어섰다.
    http://ronaldyan.spaces.msn.com/blog/cns!FA58BC446FBB14B9!107.entry

    좋은 웹페이지 즐겨찾기