이 때 등록된 리소스가 ID_ 계열이 아닌 "TEST.EXE"라는 형태로 되어 있다고 생각하시면 됩니다.
// Get the instance handle - required for loading the resource
HINSTANCE hInst = AfxGetInstanceHandle();
// Load the user-defined resource.
HRSRC hExeFile = ::FindResource(hInst, "TEST.EXE", "EXE_RESOURCE");
HGLOBAL hRes = ::LoadResource(hInst, hExeFile);
DWORD dwSize = ::SizeofResource(hInst, hExeFile);
if (hRes != NULL)
{
UINT FAR* lpnRes = (UINT FAR*)::LockResource(hRes);
TRY
{
// Create the .exe file
CFile file(lpszFileName, CFile::modeCreate or CFile::modeWrite); //lpszFileName은 함수 인자로 넘어온 것입니다.
// Write the user-defined resource to the .exe file
file.WriteHuge(lpnRes, dwSize);
file.Flush();
}
CATCH(CFileException, e)
{
}
END_CATCH
::FreeResource(hRes);
}
리소스의 내용을 고스란히 실행 파일로 복구가 되었다고 보시면 됩니다.
즉, 복구할 때 경로는 윈도우 폴더의 템프 폴더를 주로 이용하셔도 되겠죠..
이미지야 바로 로딩해서 사용하시면 되구요..
특정 바이너리를 열어서 데이터를 읽어서 사용하는경우 위의 LockResource단계에서 부터 해당 포인터 위치에서 시작해서 읽어 나가는 형태를 취하면 됩니다.(즉, 파일 오픈/클로즈가 배제된 형태로 사용하시면 된답니다)
위와 같이 내부에서보다 외부에서 실행해야 할 경우는 임시폴더로 생성후 실행하시면 됩니다.
즉, INF 파일과 같이 외부의 기능을 이용해서 등록을 하는 경우 INF 파일 자체를 임시 폴더에 리소스로부터 생성한 다음
ShellExecute(NULL, "Open", "<생성된 INF 파일>", NULL, <임시폴더까지의경로>, SW_???);
형태로 실행시키면 등록이 된답니다.
그럼 이만..
http://www.devpia.com
안창근(prodori)
예제 소스 링크
/pds2/webbbs.cgi?action=view&value=23&bbs=language
이 게시물이 | |
AiRPAGE가 |