IT/MFC

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

KSI 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;
}