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