ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • .rc 에 바이너리 리소스 첨부하기
    프로그래밍/MFC 2006. 8. 11. 05:09

    .rc 에바이너리 리소스 첨부하기

     

    1. 자신을 오픈하는 방법
    CreateFile()에 FILE_SHARE_READ 옵션을 주시면 가능할 것도 같은데 해보지 않아서 장담
    할 수 없군요.

    2. 실행 파일에 합치는 방법

    프로그램의 리소스에 바이너리 데이터를 추가할 수 있습니다.
    컴파일이 될 때 합쳐집니다.


    (프로젝트명).rc2에 아래와 같이 추가합니다.

    /////////////////////////////////////////////////////////////////////////////
    // Add manually edited resources here...
    IDR_DATA1 DATA Data.zip

    /////////////////////////////////////////////////////////////////////////////

    IDR_DATA1은 리소스 데이터를 오픈할 때 쓸 이름입니다.
    DATA는 리소스의 종류입니다.
    Data.zip은 실제 파일명입니다.
    프로젝트의 소스코드가 있는 폴더에 파일이 존재해야 에러없이 컴파일됩니다.
    (즉, 컴파일 될 때 실행 파일 안으로 합쳐집니다.)

    아래의 함수를 참고해서 사용하시기 바랍니다. 

    BOOL CTestDlg::SaveResource(LPTSTR lpName, LPTSTR lpPathName)
    {
     BOOL bRtn;
     LPTSTR lpRes;
     HRSRC hResInfo;
     HANDLE hRes;
     DWORD dwSize;
     
     // Find the wave resource.
     hResInfo = FindResource (NULL, lpName, "DATA");
     
     if (hResInfo == NULL)
      return FALSE;
     
     // Load the wave resource.
     hRes = LoadResource (NULL, hResInfo);
     
     if (hRes == NULL)
      return FALSE;
     
     // Get size of resource.
     dwSize = SizeofResource(NULL, hResInfo);
     
     // Lock the wave resource and play it.
     lpRes = (LPTSTR)LockResource (hRes);
     
     
     if (lpRes != NULL)
     { // 실제 파일로 저장하는 부분
      CFile file;
      file.Open(lpPathName, CFile::modeCreate|CFile::modeWrite);
      file.Write(lpRes, dwSize);
      file.Close();
     }
     else
      bRtn = 0;
     
     return bRtn;
    }

    댓글