메뉴 건너뛰기

프로그래밍


다음 샘플은 실행 파일 자체가 리소스로 등록되어 있는 경우 입니다.

이 때 등록된 리소스가 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





profile
제목 날짜
[TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... 4 2016.02.20
[TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 2015.04.03
[TIP] R에서 페이스북 페이지 정보 크롤링 하기 2 2017.02.11
VB에서 프로세스 실행시 우선순위 주기 2003.08.22
데브피아에 글을 올린 김태완입니다. 1 2003.08.21
필요한 모든 파일 합쳐서 하나의 .exe 파일 만들기 2003.08.27
[MFC]GIF Animation Control 2003.08.05
[GCC] C에서 밀리세컨드 구하는 법 (2) 2003.07.29
인터넷 익스플로러 툴바(툴밴드) 관련 소스링크 2003.07.23
scanf, printf와 같이 다수의 파라메터 처리 방법(MSDN) 2003.08.20
PHP,ASP,PERL에서 파일사이즈 알아내는 방법(For GunClient...) 2003.05.30
CRC 체크 C 소스 입니다. 2003.03.24
HTTP프로토콜을 이용한 파일 업로드 2002.12.24
[Tip] CTRL-ALT-DEL키 막는법(NT,2000,XP,98) 2002.07.11
[Tip]Default 스크린세이버 가동 방법 2002.07.11
TCHAR, UNICODE, 그리고 윈도우 NT 2002.02.26
[C]밀리초를 구현하는 방법 2001.08.07
[TIP]외부 프로그램 실행방법 2001.03.15
[TIP]Convex Hull 알고리즘 2000.10.10
[소켓 2]송신시 바이트 단위로 보내기 2000.09.18
Lex와 Yacc의 사용법 강좌 2000.10.09
비주얼 C++과 MASM 사용하기 2000.09.07
[소켓]C처럼 바이트 단위로 통신 2000.09.02
태그 목록
위로