개요
어플리케이션(application)을 배포할 때, 도움말 혹은 프로그램 실행 시 필요한 html 페이지를 존재할 수 있습니다.그러한 html을 dll이나 exe에 리소스(Resource) 형태로 삽입하고 그 파일에 접근하는 방법을 알아봅니다.
DLL에 html page를 추가하는 방법
1. 일단은 가장 간단한 형태의 dll 프로젝트를 만들어 보도록 하겠습니다.
a. MFC dll 형태의 프로젝트 파일을 하나 생성합니다.
b. DLL 타입은 상관없습니다. (본 강좌에서는 디폴트 옵션인 Regular DLL using shared MFC DLL type을 사용합니다)
2. Resource View에서 html 리소스를 추가합니다.
a. 프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭하면 나오는 파업메뉴에서 Add->Resource를 선택합니다.

b. Add Resource 대화상자가 열리면 HTML resource type을 선택하고 New 버튼을 누릅니다.

3. 그렇다면 기본적으로 html1.htm 이라는 파일이 프로젝트 파일에 추가되고,
그 파일은 IDR_HTML1 ID로 리소스에 추가됩니다.
(Resource.h 파일을 열어보시면 아래와 같이 IDR_HTML1이 3000번으로 추가됨을 알 수 있습니다.)

4. 이제 모든 과정이 끝났습니다. html1.htm 파일에 적당히 html 코드를 넣고 dll에서 불러보겠습니다.
(저는 아래와 같은 Test html html1.htm에 작성하였습니다.)
<body>
Test for Res Protocol
</body>
</html>
DLL에서 html을 불러오는 방법
1. 외부에서 dll에 접근하는 방법은 일단 Resource ID로 접근하는 방법이 있습니다.
단, 여기서 주의할 점은 IDR_HTML1이라는 것은 컴파일되고 난 후에는 아무런 의미가 없다는 점입니다.
그렇다면 어떻게 접근할 수 있을까요?
바로 3000이라는 IDR_HTML1이 맵핑되는 Resource ID입니다.
a. Internet Explorer에서 해당 dll의 html을 불러보겠습니다.

res://~ResTest.dll/IDR_HTML1 이 아님에 유의하시기 바랍니다.
c. 그러나 참고로 위와 같은 방법은 각 ResourceID를 전부 기억하고 있어야 하는 꺼림직한 방법입니다.
2. 그렇다면 흔히를 사용하는 "res://mshtml.dll/blank.htm" 와 같이 파일명으로 접근할 수는 없을까요?
대답은 가능하고 아주 쉽습니다.
a. html을 참조하는 IDR_HTML1 이라는 이름을 사용하고자 하는 파일이름으로 변경하시면 됩니다.
단, 따옴표로 감싸구요

b. res:// protocol로 접근할 때 필요한 파일명입니다.
굳이 IDR_HTML1 을 물리적인 파일이름과 같에 "html1.htm"으로 지정할 필요는 없습니다.
(그러나 나중에 수정의 용이성을 위해 같은 이름을 사용하는 것을 추천합니다.
c. 본 강좌에서는 물리적 파일이름과 별개로 다른 이름으로 사용해도 된다는 것을 보이기 위해
IDR_HTML1을 "html2.html"로 변경하였습니다.(따옴표 포함)
d. res://~ResTest.dll/html2.html 로 접근하면 아래와 같이 똑같은 결과를 보실 수 있습니다.

참고
1. res:// 을 Internet Explorer가 아닌 다른 특정 프로그램에서 사용하고,
그 프로그램의 위치가 분명하다면 상대경로로 사용하셔도 됩니다.
(혹은 System Directory에 dll이 있거나)
2. Firefox에서는 res protocol을 인식할 수 없습니다. Internet Explorer 4.0 이상에서 작동합니다.

ResTest.dll
ResTest.rar




