<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>그린마루</title>
		<link>http://greenmaru.com/</link>
		<description>마키짱과 소주를 사랑하는 그린B의 블로그입니다. 사소한 일상, 여자친구, 소프트웨어 개발 등 잡다한 주제를 다루고 있어요. 친구라면 누구라도 언제라도 환영입니다!! :)</description>
		<language>ko</language>
		<pubDate>Thu, 29 Jul 2010 17:49:28 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>그린마루</title>
		<url><![CDATA[http://cfile5.uf.tistory.com/image/142C18104A8BF02C5979F3]]></url>
		<link>http://greenmaru.com/</link>
		<description>마키짱과 소주를 사랑하는 그린B의 블로그입니다. 사소한 일상, 여자친구, 소프트웨어 개발 등 잡다한 주제를 다루고 있어요. 친구라면 누구라도 언제라도 환영입니다!! :)</description>
		</image>
		<item>
			<title>ATL ActiveX 만들기 - Part4. 관리자권한 UAC Elevation</title>
			<link>http://greenmaru.com/95</link>
			<description>&lt;P&gt;요즘은 확실히 ActiveX 사용이 눈에 띄게 줄어들긴 했지만, 아직도 정신 못차리고(-_-) ActiveX를 요구하는 사람들도 가끔 있다. 아마 앞으로도 한동안은 ActiveX가 필요한 경우가 간혹 있을지도 모르니까, 방법을 다 잊어버리기 전에 요점만 정리해 두자.&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px dashed; BORDER-LEFT: #9fd331 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; BORDER-RIGHT: #9fd331 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&lt;A href=&quot;http://greenmaru.com/91&quot; target=_blank&gt;2010/06/22 - [소프트웨어 개발] - ATL ActiveX 만들기 - Part1. 프로젝트 구성&lt;/A&gt;&lt;br /&gt;
&lt;A href=&quot;http://greenmaru.com/92&quot; target=_blank&gt;2010/06/23 - [소프트웨어 개발] - ATL ActiveX 만들기 - Part2. 컨트롤 구현&lt;/A&gt;&lt;br /&gt;
&lt;A href=&quot;http://greenmaru.com/94&quot; target=_blank&gt;2010/07/05 - [소프트웨어 개발] - ATL ActiveX 만들기 - Part3. 이벤트(Connection point) 구현&lt;/A&gt;&lt;/DIV&gt;
&lt;P&gt;오늘은 연재의 마지막으로, Windows Vista 이상의 운영체제에서 동작하기 위한&amp;nbsp;작업을 진행하겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;관리자 권한: UAC(User Access Control)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;아시다시피, Windows Vista부터 UAC라는 개념이 도입 되었다.&lt;/P&gt;
&lt;P&gt;UAC는 한마디로, &lt;STRONG&gt;&quot;시스템에 중대한 영향을 끼치는 작업을 하려면 적절한 권한을 갖고&amp;nbsp;있을 것&quot;&lt;/STRONG&gt;이라고 할 수있다. 보통때는 &quot;일반 사용자 권한&quot;으로 사용하다가, 새로운 어플리케이션의 설치나 레지스트리 편집처럼 시스템에 중대한 변경을 가하는 작업을 하기 위해서는 &quot;관리자 권한&quot;을 획득해야 한다. &lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/122654184C4FD39F40B85B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/122654184C4FD39F40B85B&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile29.uf@122654184C4FD39F40B85B.jpg&quot; height=&quot;158&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;인터넷 익스플로러는 여기서 한단계 더 나가서 &lt;STRONG&gt;&quot;보호모드(Low IL)&quot;&lt;/STRONG&gt;에서 동작하게 되었고,&amp;nbsp;이 위에서 동작하는 ActiveX도 많은 제약을 받게 되었다. 이러한 변화는 최근 대부분의 바이러스가 ActiveX형태로 전파되는 점을 감안하면 어쩌면 좀 늦은감 마저&amp;nbsp;있긴 하다. &lt;/P&gt;
&lt;P&gt;아무튼, 이제 사용자 PC에 있는 파일을 읽고 쓰거나 하는 저수준 작업은 원칙적으로 ActiveX에서 허용되지 않는다. 이러한 작업을 하고 싶다면, ActiveX가 관리자 권한을 획득해야 한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;프로그램 흐름&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;최종 결과물 Javascript를 통해 전체 프로그램의&amp;nbsp;흐름을 파악해 보자.&lt;/P&gt;
&lt;P&gt;여러가지 방법이 있지만,&amp;nbsp;나는 &lt;STRONG&gt;Javascript에서 프로그램의 전체 흐름을 제어하고, ActiveX는&amp;nbsp;필요한 기능만을 제공&lt;/STRONG&gt;하는 방법을 선호한다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-c&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=keyword&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;runInUAC()&amp;nbsp;{&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;var&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;helloCtrl&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;null&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;try&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;1.&amp;nbsp;ActiveX&amp;nbsp;컨트롤의&amp;nbsp;인스턴스를&amp;nbsp;생성. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;helloCtrl&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;new&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;ActiveXObject(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;GreenmaruX.HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(helloCtrl&amp;nbsp;==&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;null&lt;/SPAN&gt;&lt;SPAN&gt;)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;HelloCtrl이&amp;nbsp;시스템에&amp;nbsp;설치되지&amp;nbsp;않은&amp;nbsp;경우의&amp;nbsp;처리. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;GreenmaruX&amp;nbsp;HelloCtrl&amp;nbsp;was&amp;nbsp;not&amp;nbsp;installed.&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;2.&amp;nbsp;UAC가&amp;nbsp;필요한&amp;nbsp;OS인지를&amp;nbsp;판단. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(helloCtrl.IsNeedElevation)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;3.&amp;nbsp;관리자&amp;nbsp;권한이&amp;nbsp;적용된&amp;nbsp;개체를&amp;nbsp;구함. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;helloCtrl&amp;nbsp;=&amp;nbsp;helloCtrl.GetElevationObject(); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;4. 관리자&amp;nbsp;권한이&amp;nbsp;필요한&amp;nbsp;저수준&amp;nbsp;기능을&amp;nbsp;사용. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;helloCtrl.SomeFunction()&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(ex)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;var&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;em&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;ERROR:&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;+&amp;nbsp;ex.message&amp;nbsp;+&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;(&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;+&amp;nbsp;ex.number&amp;nbsp;+&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;)&quot;&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(em); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;}&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;대충 감을 잡으셨는가? 그러면 하나씩 구현해 보도록 하자. 다만, 관리자 권한을 획득하는 과정까지가 중요하기 때문에 4번 SomeFunction은&amp;nbsp;실제로 구현하지 않겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;UAC 필요여부 판단하기&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;아직도 Windows XP는 많이 사용되고 있기 때문에, 무조건 UAC를&amp;nbsp;진행할 필요는&amp;nbsp;없다. Windows OS를 판별해서 UAC가 필요한 운영체제인지를 판단하도록 하자.&amp;nbsp;OS버전을 알아내기 위해서&amp;nbsp;COSVersion이라는 클래스를 사용했다. 이 클래스에 대한 설명은 다음 포스트를 참조하시기 바란다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://greenmaru.com/18&quot; target=_blank&gt;2009/04/13 - [소프트웨어 개발] - Windows OS Version 알아내기&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;m_isNeedElevation이라는 BOOL형 멤버변수를 추가하고, FinalConstruct에서 UAC의 필요 여부에 따라 값을 설정하도록 했다. 참고로, FinalConstruct는 이름처럼 개체 생성이 완료되는 시점에서 호출되는 함수다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=datatypes&gt;HRESULT&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;FinalConstruct() &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;Vista이상의&amp;nbsp;운영체제는&amp;nbsp;UAC&amp;nbsp;elevation이&amp;nbsp;필요합니다. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Greenmaru::COSVersion&amp;nbsp;osv; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_isNeedElevation&amp;nbsp;=&amp;nbsp;osv.IsWindowsVistaOrLater(); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;}&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;그리고 이 값을 개체 외부로 알리기 위한 IsNeedElevation COM Property를 추가해 준다. 이 값은 개체 외부에서 설정할 필요는 없으므로 Get함수만 구현하도록 하겠다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;STDMETHODIMP&amp;nbsp;CHelloCtrl::get_IsNeedElevation(VARIANT_BOOL*&amp;nbsp;pVal) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*pVal&amp;nbsp;=&amp;nbsp;m_isNeedElevation; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;}&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;UAC Elevation&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;UAC 권한상승(Elevation)의 원리는 사실 간단하다. ActiveX객체가&amp;nbsp;&lt;STRONG&gt;자신의 새로운 인스턴스를 권한상승을 거쳐 만들도록&lt;/STRONG&gt; 한다.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GetElevationObject&lt;/STRONG&gt;라는 COM Method를 IHelloCtrl에 추가하자.&amp;nbsp;반환형은 &lt;STRONG&gt;VARIANT*&lt;/STRONG&gt;형으로 지정한다. 이 함수는 권한 상승된 HelloCtrl의 새로운 인스턴스를 반환해 준다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;HelloCtrl.cpp에서 &lt;STRONG&gt;strsafe.h&lt;/STRONG&gt;를&amp;nbsp;Include해 준 다음,&amp;nbsp;함수를 다음과 같이 구현하록 한다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;STDMETHODIMP&amp;nbsp;CHelloCtrl::GetElevationObject(VARIANT*&amp;nbsp;lpvObject) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;HRESULT&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;hr; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BIND_OPTS3&amp;nbsp;bo; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;WCHAR&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;wszCLSID[64]; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;WCHAR&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;wszMonikerName[512]; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IHelloCtrl&amp;nbsp;*&amp;nbsp;objElevator&amp;nbsp;=&amp;nbsp;NULL;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(&amp;nbsp;!&amp;nbsp;m_isNeedElevation&amp;nbsp;) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;vt&amp;nbsp;=&amp;nbsp;VT_DISPATCH; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;pdispVal&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;권한&amp;nbsp;상승을&amp;nbsp;시도합니다. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringFromGUID2(&amp;nbsp;CLSID_HelloCtrl,&amp;nbsp;wszCLSID,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(wszCLSID)/&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(wszCLSID[0])&amp;nbsp;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hr&amp;nbsp;=&amp;nbsp;StringCchPrintfW(&amp;nbsp;wszMonikerName,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(wszMonikerName)/&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(wszMonikerName[0]),&amp;nbsp;L&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;Elevation:Administrator!new:%s&quot;&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;wszCLSID&amp;nbsp;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(&amp;nbsp;FAILED(hr)&amp;nbsp;) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;vt&amp;nbsp;=&amp;nbsp;VT_NULL; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_FALSE; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(&amp;nbsp;&amp;amp;bo,&amp;nbsp;NULL,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(bo)&amp;nbsp;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.cbStruct&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(bo); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.hwnd&amp;nbsp;=&amp;nbsp;NULL; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.dwClassContext&amp;nbsp;=&amp;nbsp;CLSCTX_LOCAL_SERVER; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hr&amp;nbsp;=&amp;nbsp;&amp;nbsp;CoGetObject(&amp;nbsp;wszMonikerName,&amp;nbsp;&amp;amp;bo,&amp;nbsp;IID_IHelloCtrl,&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;**)&amp;amp;objElevator&amp;nbsp;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(&amp;nbsp;FAILED(hr)&amp;nbsp;) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;vt&amp;nbsp;=&amp;nbsp;VT_NULL; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_FALSE; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;vt&amp;nbsp;=&amp;nbsp;VT_DISPATCH; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;pdispVal&amp;nbsp;=&amp;nbsp;objElevator; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpvObject-&amp;gt;pdispVal-&amp;gt;AddRef(); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;천천히 살펴보면 알겠지만, 핵심은 CoGetObject를 통해 &lt;STRONG&gt;COM개체 자신의 새로운 인스턴스를 만들어 내는 것&lt;/STRONG&gt;이다. 다만 일반적인 CoCreateObject등의 방식으로는&amp;nbsp;Elevation처리를 거칠 수 없기 때문에 조금 더&amp;nbsp;복잡해 졌다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;그 다음, 문자열 리소스를 하나 추가한다. 나는 &lt;STRONG&gt;IDS_ELEVATION&lt;/STRONG&gt;이라고 이름지었는데, 이 문자열은 Elevation과정에서 사용자에게 컨트롤의 이름으로 표시된다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/1929C4154C51269F75D1DA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1929C4154C51269F75D1DA&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile5.uf@1929C4154C51269F75D1DA.jpg&quot; height=&quot;119&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;그리고, &lt;STRONG&gt;DLL이름.rgs파일&lt;/STRONG&gt;(Greenmaru.rgs)을 다음과 같이 만든다.&lt;/P&gt;
&lt;P&gt;아시다시피, rgs파일의 내용은&amp;nbsp;COM개체를 시스템에 등록할 때 레지스트리에 기록된다. 다른 컨트롤을 만들때는&amp;nbsp;대충 어디를 어떻게 바꿔야 할지를 짐작할 수 있을 것이다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;HKCR &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NoRemove&amp;nbsp;AppID &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;%APPID%&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;GreenmaruX&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;DllSurrogate&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;GreenmaruX.DLL&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;AppID&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;%APPID%&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;다음으로, &lt;STRONG&gt;컨트롤이름.rgs&lt;/STRONG&gt;파일(HelloCtrl.rgs)의 내용은 다음과 같다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;HKCR &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GreenmaruX.HelloCtrl.1&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;Greenmaru&amp;nbsp;Example&amp;nbsp;ActiveX&amp;nbsp;Control&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CLSID&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;{4C80B2EE-6D19-4F77-9946-DF7AD17EEE67}&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GreenmaruX.HelloCtrl&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;Greenmaru&amp;nbsp;Example&amp;nbsp;ActiveX&amp;nbsp;Control&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CLSID&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;{4C80B2EE-6D19-4F77-9946-DF7AD17EEE67}&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CurVer&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;GreenmaruX.HelloCtrl.1&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NoRemove&amp;nbsp;CLSID &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ForceRemove&amp;nbsp;{4C80B2EE-6D19-4F77-9946-DF7AD17EEE67}&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;Greenmaru&amp;nbsp;Example&amp;nbsp;ActiveX&amp;nbsp;Control&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProgID&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;GreenmaruX.HelloCtrl.1&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VersionIndependentProgID&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;GreenmaruX.HelloCtrl&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ForceRemove&amp;nbsp;Programmable &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InprocServer32&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;%MODULE%&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;ThreadingModel&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;Apartment&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;AppID&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;%APPID%&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Elevation &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;Enabled&amp;nbsp;=&amp;nbsp;d&amp;nbsp;1 &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;LocalizedString&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;@%MODULE%,-101&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ForceRemove&amp;nbsp;Control &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ForceRemove&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;ToolboxBitmap32&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;%MODULE%,&amp;nbsp;106&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MiscStatus&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;0&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;1&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;%OLEMISC%&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TypeLib&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;{C5133EA0-1CE5-4FFC-9C7D-79AE48AD2233}&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Version&amp;nbsp;=&amp;nbsp;s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&#039;1.0&#039;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;}&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;기본적으로 생성되는 rgs파일의 내용이 Visual Studio의 버전에 따라 조금씩 차이가 있으므로, 위의 내용을 참고해서 적절히 편집해 주도록 한다.&lt;/P&gt;
&lt;P&gt;주의할 부분은 32번째 라인의 LocalizedString이다. LocalizedString은&amp;nbsp;UAC화면에서 표시할 문자열 리소스의 숫자형 ID를&amp;nbsp;의미한다. 101은&amp;nbsp;리소스에 추가한 IDS_ELEVATION을 의미한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;디버그&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;F5를&amp;nbsp;누르고 디버거&amp;nbsp;컨트롤을 실행해 보면, UAC Elevation화면이 표시되지 않는다. 이 경우는 보호모드가 작동하지 않기 때문이다. 윈도우 탐색기를 통해 HelloCtrl.htm을 직접 실행해야 예상된 결과를 볼 수 있다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/165977154C5132F72BFA84&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/165977154C5132F72BFA84&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile7.uf@165977154C5132F72BFA84.jpg&quot; height=&quot;169&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;여기서 중요한 문제!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;SomeFunction의 구현부에 아무런 처리나 집어넣고 중단점(Break point)을 걸어보자. 이 상태에서 실행하면 디버거에서 중단점을 잡지 못한다.&lt;/P&gt;
&lt;P&gt;이유는 두가지다.&lt;/P&gt;
&lt;P&gt;첫째로, UAC를 거치면서 디버거가 실행한 컨트롤의 인스턴스가 아니라, (GetElevationObject함수에서)&amp;nbsp;Elevation을 거쳐서 새롭게 생성된 컨트롤의 인스턴스를 통해 Logic이 진행되기 때문이다.&lt;/P&gt;
&lt;P&gt;또한, 내가 사용한 방식은 Javascript에서 CreateObject를 통해 ActiveX인스턴스를 만들어낸 것이므로 디버거가 추적할 수 없게 되버린다.&lt;/P&gt;
&lt;P&gt;이런 상태로 디버그를 한다는건 무척 짜증스러운 일이다. Visual Studio의 강력한 디버그 기능을 사용하지 못하게 되므로, 전통적인 디버그 방식 - 실행하고 출력해서 확인하고 수정하는&amp;nbsp;- 밖에는 쓸 수 없는 것이다.&lt;/P&gt;
&lt;P&gt;따라서, 고전적인(?) object 태그를 통해 개체를 생성하고, 디버그를 위한 Javascript를 별도로 작성하는 쪽을 추천하겠다. 조금 귀찮기는 해도, 디버거 없이 테스트 하는 쪽보다는 훨씬 효과적인 방법이다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-c&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;lt;script&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;text/javascript&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;doDebug()&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;var&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;helloCtrl&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;//&amp;nbsp;UAC를&amp;nbsp;통한&amp;nbsp;개체생성&amp;nbsp;부분을&amp;nbsp;제거하고,&amp;nbsp;필요한&amp;nbsp;함수들을&amp;nbsp;테스트한다. &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;helloCtrl.SomeFunction(); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;/script&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;object&amp;nbsp;id=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;classid=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;CLSID:4C80B2EE-6D19-4F77-9946-DF7AD17EEE67&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&amp;lt;/object&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/original/127FF4244C513B0156AB2E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/127FF4244C513B0156AB2E&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile26.uf@127FF4244C513B0156AB2E.jpg&quot; height=&quot;160&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;마무리&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;이제 남은 작업은 컨트롤에 서명(Signing)하고 CAB으로 만들어서 배포하는 것이다. 이 과정에 관한 정보는 참고할만한 문서를 찾기 쉬운 편이므로 여기서는 다루지 않겠다.&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;소스코드를 다운로드 하게 되면, Build한 다음 프로젝트를 닫았다가 다시 로드해서 보시기 바란다.&lt;/P&gt;&lt;/P&gt;
&lt;P&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://greenmaru.tistory.com/attachment/cfile3.uf@1368B5254C513CAA41088C.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; GreenmaruX_Final.zip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/1402D4174C5140351C7874&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1402D4174C5140351C7874&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;20051102173343795.gif&quot; height=&quot;205&quot; width=&quot;155&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-95-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-95-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-95-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>소프트웨어 개발</category>
			<category>ActiveX</category>
			<category>atl</category>
			<category>C++</category>
			<category>com</category>
			<category>UAC</category>
			<category>visualc++</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/95</guid>
			<comments>http://greenmaru.com/95#entry95comment</comments>
			<pubDate>Thu, 29 Jul 2010 17:49:04 +0900</pubDate>
		</item>
		<item>
			<title>ATL ActiveX 만들기 - Part3. 이벤트(Connection point) 구현</title>
			<link>http://greenmaru.com/94</link>
			<description>&lt;P&gt;요즘은 확실히 ActiveX 사용이 눈에 띄게 줄어들긴 했지만, 아직도 정신 못차리고(-_-) ActiveX를 요구하는 사람들도 가끔 있다. 아마 앞으로도 한동안은 ActiveX가 필요한 경우가 간혹 있을지도 모르니까, 방법을 다 잊어버리기 전에 요점만 정리해 두자.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px dashed; BORDER-LEFT: #9fd331 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; BORDER-RIGHT: #9fd331 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&lt;STRONG&gt;관련글&lt;/STRONG&gt;&lt;br /&gt;

&lt;P&gt;&lt;A href=&quot;http://greenmaru.com/91&quot; target=_blank&gt;2010/06/22 - [소프트웨어 개발] - ATL ActiveX 만들기 - Part1. 프로젝트 구성&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://greenmaru.com/92&quot; target=_blank&gt;2010/06/23 - [소프트웨어 개발] - ATL ActiveX 만들기 - Part2. 컨트롤 구현&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;이 포스트 에서는 이벤트(Connection point)를 발생시키는 컨트롤을 작성해 보겠다.&lt;br /&gt;
만약 이벤트를 지원할 필요가 없다면 이 과정은 건너뛰도록 하자.&lt;/P&gt;
&lt;P&gt;이벤트를 구성하는 것 자체는 &quot;이론적으로는&quot; 간단한데, 실제로는 Visual Studio의 버그나&amp;nbsp;예상치 못한 동작 등등 인내심의 한계를 시험하는 경우가 많다.&lt;br /&gt;
따라서, 꼭 필요한 경우가 아니라면 이벤트를 발생시키는 컨트롤의 작성은 피하시라고 권하고 싶다.&lt;br /&gt;
그러나~!! 세상만사 개발자 마음데로 되는건 별로 없으니까-_-&amp;nbsp;어떻게 하는지 정도는 알아두는게 좋겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;이벤트 구성&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;작성할 이벤트는,&amp;nbsp;단순함을 위해&amp;nbsp;&quot;사용자가 컨트롤을 클릭하면 이벤트가 발생하는&quot; 정도 까지만 구성 하겠다.&lt;br /&gt;
추가로, 마우스 커서의&amp;nbsp;좌표를 이벤트 정보로 전달하도록 하겠다.&lt;/P&gt;
&lt;P&gt;이 연제물에서 제시한 방향대로 잘&amp;nbsp;따라오고 있다면, GreenmaruX.HelloCtrl은 Connection point를 구현할 준비가 이미 끝난 상태다.&lt;/P&gt;
&lt;P&gt;Connection point로 구현된 인터페이스인 &lt;STRONG&gt;_IHelloCtrlEvents&lt;/STRONG&gt;에서&amp;nbsp;Add Method를 실행한다.&lt;br /&gt;
반환형은 &lt;STRONG&gt;void&lt;/STRONG&gt;로 선택하고, 적절한 이벤트의 이름을 입력해 준다. 일반적으로 &lt;STRONG&gt;On + 동사형&lt;/STRONG&gt;을 사용하는게 컨트롤 사용자 입장에서 자연스럽다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/202AA4164C313C7B8282ED&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/202AA4164C313C7B8282ED&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile23.uf@202AA4164C313C7B8282ED.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;예제에서는 마우스가 클릭되었을때 이벤트를 발생 시킬 것이므로, &lt;STRONG&gt;OnMouseClick&lt;/STRONG&gt;이라는 이름을 붙여줬다.&lt;br /&gt;
마우스의 좌표를 전달하기 위해 X, Y좌표값으로 사용할&amp;nbsp;정수형 매개변수 2개를 추가했다.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;한줄요약:&lt;/STRONG&gt; 이벤트의 구현은 &lt;STRONG&gt;void형 함수&lt;/STRONG&gt;를 사용하고, &lt;STRONG&gt;이벤트 처리기(Handler)에서 필요한 정보를 [in]매개변수로&lt;/STRONG&gt; 넘긴다는 것만 기억하시면 되겠다.&lt;/P&gt;
&lt;P&gt;이 과정을 거치면 _IHelloCtrlEvents에 이벤트가 하나 추가되는 것을 볼 수 있다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1735DF174C313CDE3AF26B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1735DF174C313CDE3AF26B&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;Snap8.jpg&quot; height=&quot;88&quot; width=&quot;397&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Visual Studio2010을 사용하는 경우, 생성되는 이벤트(GreenmaruX_i.h에 생성됨)를 조금 주의깊게 살펴보면&amp;nbsp;&lt;STRONG&gt;#if defined(__cplusplus) &amp;amp;&amp;amp; !defined(CINTERFACE)&lt;/STRONG&gt;조건에 의해 &lt;STRONG&gt;interface _IHelloCtrlEvents&lt;/STRONG&gt;가 실제로 사용되지 않는다는걸 알 수 있다.&amp;nbsp;그렇지만 일단은 Pass~&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;Connection Point 구현&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;그 다음, Connection Point를 구현해야 한다.&lt;br /&gt;
Class view에서 &lt;STRONG&gt;CHelloCtrl&lt;/STRONG&gt;을 오른쪽 클릭하고 &lt;STRONG&gt;Add - Add Connection Point&lt;/STRONG&gt;를 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/176927164C2A9C49AAAA78&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/176927164C2A9C49AAAA78&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile1.uf@176927164C2A9C49AAAA78.jpg&quot; height=&quot;256&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Connection Point 마법사에서 HelloCtrl의 이벤트를 구현하도록 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/137612184C2A9E8072CB2B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/137612184C2A9E8072CB2B&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile2.uf@137612184C2A9E8072CB2B.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;이렇게 해 두면 &lt;STRONG&gt;CProxy_IHelloCtrlEvents&amp;lt;T&amp;gt;&lt;/STRONG&gt; 클래스에 &lt;STRONG&gt;Fire_OnMouseClicked(LONG x, LONG y)&lt;/STRONG&gt; 함수가 자동으로 구현되게 된다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/1938ED174C313D5B257D75&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/1938ED174C313D5B257D75&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile10.uf@1938ED174C313D5B257D75.jpg&quot; height=&quot;354&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;필요한 이벤트를 추가로 더 구현해야 한다면, 이 과정을 반복해 주면 된다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;이벤트 발생 시키기&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;우선 사용자가 컨트롤을 클릭했을 때의 이벤트를 컨트롤이 먼저 알아차려줘야 한다.&lt;br /&gt;
&lt;STRONG&gt;WM_LBUTTONDOWN&lt;/STRONG&gt;이벤트를 받을 수 있도록 핸들러를 추가해 보자. &lt;STRONG&gt;CHelloCtrl&lt;/STRONG&gt;에 다음 메시지 처리기를 추가해 준다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;BEGIN_MSG_MAP(CHelloCtrl) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;MESSAGE_HANDLER(WM_LBUTTONDOWN,&amp;nbsp;OnLeftButtonDown)&lt;/STRONG&gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CHAIN_MSG_MAP(CComControl&amp;lt;CHelloCtrl&amp;gt;) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEFAULT_REFLECTION_HANDLER() &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;END_MSG_MAP()&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;ActiveX에서 메시지의 처리는,&amp;nbsp;&amp;nbsp;C++을 통해 Windows Message를 사용하는 일반적인 방법과 크게 다르지 않다.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;OnLeftButtonDown&lt;/STRONG&gt; 함수를&amp;nbsp;메시지 처리기로 등록하고, 이 함수에서 이벤트를 발생시키기 위한 &lt;STRONG&gt;Fire_OnMouseClick&lt;/STRONG&gt;를 호출해 주면 된다.&lt;/P&gt;
&lt;P&gt;아시다 시피, &lt;STRONG&gt;WM_LBUTTONDOWN&lt;/STRONG&gt;메시지는 &lt;STRONG&gt;lParam&lt;/STRONG&gt;을 통해 마우스 커서의 좌표를 통지해 준다.&lt;br /&gt;
예제의 단순함을 위해 GetCursorPos나 ScreenToClient등의 부가적인 처리는 건너 뛰었다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=datatypes&gt;LRESULT&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;OnLeftButtonDown(&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;UINT&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;uMsg,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;WPARAM&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;wParam,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;LPARAM&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;lParam,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;BOOL&lt;/SPAN&gt;&lt;SPAN&gt;&amp;amp;&amp;nbsp;bHandled) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;Fire_OnMouseClick(LOWORD(lParam),&amp;nbsp;HIWORD(lParam));&lt;/STRONG&gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;0; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;}&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;예제에서 중요하게 봐야 할 부분은, &lt;STRONG&gt;Fire_OnMouseClick&lt;/STRONG&gt; 함수를 호출하여 이벤트를 발생 시켰다는 것이다.&lt;br /&gt;
즉, 이벤트를 발생시킬 필요가 있다면 &lt;STRONG&gt;Proxy클래스에 자동으로 구현되는 Fire_이벤트 함수를 호출&lt;/STRONG&gt;해 주기만 하면 된다. 이보다 간단할 수는 없다!&lt;/P&gt;
&lt;P&gt;참고로, Fire_OnMouseClick함수의 내부 구현을 살펴보면, Connection point에 연결된 함수(처리기)를 호출해 주는 내용으로 구성되어 있다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;이벤트 처리기(Handler) 작성&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;이제, Javascript에서 이벤트를 받아서 처리하기 위한 Javascript 함수를 작성해 보자.&lt;/P&gt;
&lt;P&gt;약간 특이한 형태의 Javascript선언이 필요하다. (표준 html은 아니지만, 어차피 ActiveX도 표준이 아니니까)&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-c&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;lt;script&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;text/javascript&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;&lt;STRONG&gt;for&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;STRONG&gt;event&lt;/STRONG&gt;=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;OnMouseClick(x,y)&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;alert(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&amp;nbsp;MouseClick&amp;nbsp;event&amp;nbsp;fired!&amp;nbsp;:&amp;nbsp;(&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;+&amp;nbsp;x&amp;nbsp;+&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;:&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;+&amp;nbsp;y&amp;nbsp;+&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;)&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;/script&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;script tag에 추가로 다음 두가지 속성을 삽입해 줘야 한다.&lt;/P&gt;
&lt;UL style=&quot;LIST-STYLE-TYPE: square&quot;&gt;
&lt;LI&gt;&lt;STRONG&gt;for&lt;/STRONG&gt;: 컨트롤의 ID를 지정해 준다.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;event&lt;/STRONG&gt;: 처리해야 할 이벤트를 지정해 준다. 매개변수도 기술해야 한다. Javascript에는 별도의 자료형이 없다는 걸 기억하자. 여기에서 사용된 매개변수 명이 아래 script 블록에서 사용될 변수 명이다. (당연한 소리지만, 실제 컨트롤에서 정의한 변수명과 같을 필요는 없다.)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;이제 컨트롤을 Build하고 실행시킨 다음 아무 곳이나 클릭해 보자.&lt;br /&gt;
만약 한번에 Javascript alert대화상자를 볼 수 있다면 당신은 무척 운이 좋거나, Visual Studio 2010을 사용하지 않았거나....뭔가 예제를 잘못 따라했을 가능성이 높다 -_-;&lt;/P&gt;
&lt;P&gt;아무리 클릭해도 우리의 컨트롤은 묵묵부답일 것이다. 뭐가 잘못 된걸까?-_-&lt;br /&gt;
이곳저곳 찔러보고, 컴파일도 다시 해보고, 프로젝트도 다시 로드해 보고.. 하다보면, _IHelloCtrlEvents에 정의되어 있던 OnMouseClick함수가 사라지는 경험도 하게 될 것이다. 나도&amp;nbsp;환장-_-할 뻔 했다.&lt;/P&gt;
&lt;P&gt;정답은, 위의 &quot;&lt;EM&gt;&lt;STRONG&gt;#if defined(__cplusplus) &amp;amp;&amp;amp; !defined(CINTERFACE)&lt;/STRONG&gt;조건에 의해 &lt;STRONG&gt;interface _IHelloCtrlEvents&lt;/STRONG&gt;가 실제로 사용되지 않는다&lt;/EM&gt;&quot; 라고 말 한데에서 찾을 수 있다.&lt;/P&gt;
&lt;P&gt;자세한 설명은 생략하고, 문제 해결 방법을 설명 하겠다.&lt;br /&gt;
&lt;STRONG&gt;GreenmaruX.idl&lt;/STRONG&gt;파일을 열어보면 &lt;STRONG&gt;_IHelloCtrlEvents&lt;/STRONG&gt;의 정의를 찾을 수 있다. 여기에다가 수동으로 우리의 이벤트를 추가해 주자. (&lt;STRONG&gt;_IHelloCtrlEvents&lt;/STRONG&gt;에 추가된 함수 정의를 잘라내기해서 붙여넣으면 간단하다.)&lt;/P&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;library&amp;nbsp;GreenmaruXLib &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;importlib(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;stdole2.tlb&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;uuid&lt;/SPAN&gt;&lt;SPAN&gt;(128FE3CF-CCF5-4F99-B859-418331AB07A2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;] &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dispinterface&amp;nbsp;_IHelloCtrlEvents &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;properties: &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;methods: &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[id(1)]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;OnMouseClick([in]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;LONG&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;x,&amp;nbsp;[in]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;LONG&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;y); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/STRONG&gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;uuid&lt;/SPAN&gt;&lt;SPAN&gt;(4C80B2EE-6D19-4F77-9946-DF7AD17EEE67),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;control &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;] &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;coclass&amp;nbsp;HelloCtrl &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;default&lt;/SPAN&gt;&lt;SPAN&gt;]&amp;nbsp;interface&amp;nbsp;IHelloCtrl; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;default&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;nbsp;source]&amp;nbsp;dispinterface&amp;nbsp;_IHelloCtrlEvents; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;};&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;왜 이런 현상이 발생 했는지는 IDL, COM Interface, Connection Point에 대한 보다 자세한 이해가 필요하다.&lt;br /&gt;
각각에 대해 궁금하신 분은 Goooooogle신을 영접해 보시기 바란다.&lt;/P&gt;
&lt;P&gt;이제 컨트롤을 실행해 보면, 예상된 결과 - 이벤트 발생과 처리 - 를 얻을 수 있을 것이다.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/143482164C3143187EC361&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/143482164C3143187EC361&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile25.uf@143482164C3143187EC361.jpg&quot; height=&quot;338&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;소스코드 다운로드&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;소스코드를 다운로드 하게 되면, Build한 다음 프로젝트를 닫았다가 다시 로드해서 보시기 바란다.&lt;/P&gt;
&lt;P&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://greenmaru.tistory.com/attachment/cfile23.uf@16750C284C3142886E9F0D.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; GreenmaruX_Part3.zip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/P&gt;
&lt;P&gt;다음 글에서는, Windows Vista이상에서 사용되는 컨트롤을 위한 권한 상승(Elevation)을 구현해 보겠다.&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-94-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-94-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-94-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>소프트웨어 개발</category>
			<category>ActiveX</category>
			<category>atl</category>
			<category>C++</category>
			<category>com</category>
			<category>ConnectionPoints</category>
			<category>event</category>
			<category>MS</category>
			<category>visualc++</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/94</guid>
			<comments>http://greenmaru.com/94#entry94comment</comments>
			<pubDate>Mon, 05 Jul 2010 11:29:32 +0900</pubDate>
		</item>
		<item>
			<title>토코나메（常滑）도자기 산책길（焼き物散歩道）</title>
			<link>http://greenmaru.com/93</link>
			<description>&lt;P&gt;마키와 함께 2009년 가을에 다녀왔던 곳! 이제서야 포스팅을- -;;&lt;/P&gt;
&lt;P&gt;나고야국제공항에서 가까운곳에 있으니까, 혹시 나고야(名古屋)쪽에 가게 된다면 돌아오는 길에 한번쯤 들러 보시는 것도 좋겠다.&lt;/P&gt;&lt;A href=&quot;http://www.toko.or.jp/tokoname-kankou/map/ENG/Tokoname_E_P03P04.pdf&quot;&gt;&lt;FONT color=#888888&gt;http://www.toko.or.jp/tokoname-kankou/map/ENG/Tokoname_E_P03P04.pdf&lt;/FONT&gt;&lt;/A&gt; 
&lt;P&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/116948104C271D2F5F8DA8&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/116948104C271D2F5F8DA8&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040235.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;가는길에 만난 돼지!! 애완용 돼지 치고는 조금 큰것 같은데 -_-; 아무튼 귀여웠음. 차도 돼지 모양의 스티커로&amp;nbsp;꾸며놓은 걸로 봐서는 꽤나 돼지를 좋아하는 사람인듯 ㅋ&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile28.uf.tistory.com/original/187B91124C271F4C857539&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile28.uf.tistory.com/image/187B91124C271F4C857539&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040263.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;입구에 위치한 기념품 상점에서는 각종 도자기를 판매하고 있다. 특히 마네키네코(招き猫)가 많다.&lt;br /&gt;
마네키네코는 꽤 비싼 편이라서, 제일 작은 크기(엄지 손톱 정도?)가 500엔정도, 조금 큰건 10,000엔도 넘는다.&amp;nbsp;어느정도 그럴듯 해 보이는 녀석은 3,000~5,000엔 정도는 하기 때문에,&amp;nbsp;누군가에게 선물로&amp;nbsp; 주고 싶다면 만만치 않게 지출하셔야 할듯!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1437B4174C2720398E8E31&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1437B4174C2720398E8E31&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040270.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/original/173CAC1A4C27208CED6828&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/173CAC1A4C27208CED6828&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040271.jpg&quot; height=&quot;374&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/206897044C2720F9026923&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/206897044C2720F9026923&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040282.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;옛날 집과 물건들,&amp;nbsp;구석구석에 숨어있는 아기자기한 도자기 소품들이 볼꺼리를 제공해 준다. 꽤나 빈티지해 보이는 옛날 소품을 팔고있는 곳도 많다.&lt;br /&gt;
도자기를 굽는 곳이었던 탓인지 집들은 대부분 까만색이다. 큰 카메라를 싸들고 사진찍고 다니는 사람들도 종종 볼 수 있었다. 아닌게 아니라, 구도만 잘 잡으면 꽤 그럴싸한 사진이 나올 것 같은 분위기이긴 하다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/1155AC014C27225E3D31C0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1155AC014C27225E3D31C0&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040302.jpg&quot; height=&quot;500&quot; width=&quot;375&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/182966024C27230755A13C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/182966024C27230755A13C&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040315.jpg&quot; height=&quot;500&quot; width=&quot;375&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/19357B184C2723D39C1A45&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/19357B184C2723D39C1A45&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040341.jpg&quot; height=&quot;500&quot; width=&quot;375&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;이곳또한 왠지 비싼 카메라가 사고싶어 지는 곳중에 하나였다. 왠지 좋은 카메라만 있으면 어떻게 찍어도 멋진 작품이 될 것 같은 느낌?ㅋㅋ&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/1678EB1E4C2725DC2E9D8F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/1678EB1E4C2725DC2E9D8F&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040336.jpg&quot; height=&quot;500&quot; width=&quot;375&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;금강산도 식후경의 일본어 버전인&amp;nbsp;&quot;꽃보다 당고&quot;(花よりだんご)라는 말도&amp;nbsp;있듯이, 이리저리 걷다보면 출출해 지기 마련이다. 가볍게 당고 한두개씩 먹고 가보자. 꼭대기쯤에 있는 작은 당고 가게에서는 맛있는 당고와 소프트크림을 팔고 있다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1207B81D4C2726953242CF&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1207B81D4C2726953242CF&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;PA040348.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;나오는 길쪽으로는 거대한 마네키네코 얼굴도 볼 수 있다. 여기도 기념 사진 찍기에 좋은 장소니까 한번 들러보시기 바란다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;공항에서 그리 멀지않은 곳에 있으니까 3-4시간정도 여유가 있다면 돌아오기 전에 한번 들러 보시길 바란다. 좋은 카메라를 사고 싶다는 펌프질을 양껏 받고 올 수 있는 곳이다. -_-;&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-93-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-93-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-93-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;	        
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=7777168&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;</description>
			<category>여행과맛집</category>
			<category>나고야</category>
			<category>여행</category>
			<category>일본</category>
			<category>일본여행</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/93</guid>
			<comments>http://greenmaru.com/93#entry93comment</comments>
			<pubDate>Sun, 27 Jun 2010 19:25:54 +0900</pubDate>
		</item>
		<item>
			<title>ATL ActiveX 만들기 - Part2. 컨트롤 구현</title>
			<link>http://greenmaru.com/92</link>
			<description>&lt;P&gt;요즘은 확실히 ActiveX 사용이 눈에 띄게 줄어들긴 했지만, 아직도 정신 못차리고(-_-) ActiveX를 요구하는 사람들도 가끔 있다. 아마 앞으로도 한동안은 ActiveX가 필요한 경우가 간혹 있을지도 모르니까, 방법을 다 잊어버리기 전에 요점만 정리해 두자.&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px dashed; BORDER-LEFT: #9fd331 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; BORDER-RIGHT: #9fd331 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&lt;STRONG&gt;관련글&lt;/STRONG&gt;&lt;br /&gt;

&lt;P&gt;&lt;A href=&quot;http://greenmaru.com/91&quot; target=_blank&gt;2010/06/22 - [소프트웨어 개발] - ATL ActiveX 만들기 - Part1. 프로젝트 구성&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;초기&amp;nbsp;작업&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ATL 컨트롤을 추가한 다음 프로젝트를 다시 로드해 보면 여러가지 클래스들이 자동으로 구현됨을 확인할 수 있다.&lt;br /&gt;
&lt;STRIKE&gt;빌어먹을&lt;/STRIKE&gt; COM&amp;nbsp;사양 구현을 일일이 손으로 안해도 되게 해준 Visual Studio 만세! 를 한번 외쳐주자.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/183904194C2162426A90DD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/183904194C2162426A90DD&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile9.uf@183904194C2162426A90DD.jpg&quot; height=&quot;235&quot; width=&quot;250&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;이제,&amp;nbsp;필요하지만 자동으로는 추가되지 않는 항목들을 손으로 추가해 보자.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. CString&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;예전에는, 순수 ATL프로젝트를 사용했을 때 가장 큰 문제중에 하나는 CString을 사용할 수 없다는 거였다.&lt;br /&gt;
단순히 CString만을 사용하기 위해서 MFC지원 컨트롤을 만드는 경우도 있었다. 그만큼 CString이 편리하기도 하고 CComBSTR과 BSTR만으로 문자열을 조작한다는 것이 &lt;STRIKE&gt;지랄맞게&lt;/STRIKE&gt; 힘들기 때문이다.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;그러나!!&lt;/STRONG&gt; VS2005부터는 CString이 더이상 MFC만의 것이 아니다! 템플릿 기반으로 작성된 새로운 CString이 도입되었다. 이걸 사용하기 위해서는 &lt;STRONG&gt;stdafx.h에 &amp;lt;atlstr.h&amp;gt;해더파일을 추가&lt;/STRONG&gt;해 주면 된다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=preprocessor&gt;#include&amp;nbsp;&amp;lt;atlstr.h&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;어플리케이션 전역에서 사용하기 위해 stdafx.h에다가 삽입한다.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Safe For Scripting&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;이상태에서 ActiveX를 그냥 동작시키면, &quot;스크립트에 안전하지 않다&quot;거나, &quot;초기화 하겠냐&quot; 등의 경고메시지가 출력된다.&amp;nbsp;(Vista 이상에서 나오는 ActiveX를 실행 하겠냐는 경고가 아니다!)&lt;/P&gt;
&lt;P&gt;이 문제를 해결하려면, 이 컨트롤은 스크립팅과 초기화에 안전하다는 사실을&amp;nbsp;컨테이너에게 알려줘야 한다.&amp;nbsp;여러가지 방법중에 가장 편한&amp;nbsp;건, 다음 매크로를 &lt;STRONG&gt;HelloCtrl.h&lt;/STRONG&gt;에 추가해 주는 방법이다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;BEGIN_CATEGORY_MAP(CHelloCtrl) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IMPLEMENTED_CATEGORY&amp;nbsp;(CATID_SafeForScripting) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IMPLEMENTED_CATEGORY&amp;nbsp;(CATID_SafeForInitializing) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;END_CATEGORY_MAP()&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;짐작할 수 있듯이, 스크립팅과 초기화에 안전하다는 표시다. &lt;br /&gt;
이 외에도 Category map에 추가로 넣을 수 있는 옵션이 몇가지 더 있지만 일반적으로는 사용되지 않는다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;디버거 설정 및 실행&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;이 상태에서 디버거(F5)를 실행해 보면, &lt;STRONG&gt;&quot;결과물이&amp;nbsp;EXE가 아니라서 실행할 수 없다. 블라블라~&quot;&lt;/STRONG&gt; 하는 오류를 볼 수 있다.&lt;/P&gt;
&lt;P&gt;일반적인 디버거로는 ActiveX를 테스트해 볼 수 없으므로, 웹 브라우저 디버거를 사용하자. (물론 IE만 가능하다)&lt;/P&gt;
&lt;P&gt;솔루션 탐색기에서 프로젝트를 오른쪽 클릭하고 &lt;STRONG&gt;속성(Property)&lt;/STRONG&gt;을 선택한다. &lt;STRONG&gt;Configuration Properties - Debugging에서 Debugger로 Web Browser Debugger를 선택&lt;/STRONG&gt;해 준다.&lt;/P&gt;
&lt;P&gt;디버거가 실행되면서 컨트롤을 불러올 수 있도록, 시작 URL은 &lt;STRONG&gt;$(ProjectDir)HelloCtrl.htm&lt;/STRONG&gt;을 입력해 준다. &lt;STRONG&gt;$(ProjectDir)&lt;/STRONG&gt;는 프로젝트 파일이 저장되어있는 로컬 경로를 의미하며, 이곳에는 만들려고 하는 컨트롤의 OBJECT태그가 포함된 &lt;STRONG&gt;컨트롤이름.htm&lt;/STRONG&gt;파일이 자동으로 생성되어 있다. &lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/17489B154C217223123FDC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/17489B154C217223123FDC&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile6.uf@17489B154C217223123FDC.jpg&quot; height=&quot;317&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;이제 F5를 통해 실행해 보면, 웹 브라우저에서 HelloCtrl.htm이 불려지고, 컨트롤의 모습을 확인할 수 있게된다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/1440C3184C2172C501ADC4&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/1440C3184C2172C501ADC4&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile23.uf@1440C3184C2172C501ADC4.jpg&quot; height=&quot;342&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;속성(Property) 추가&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;컨트롤에 속성을 추가해 보자. 이 예제가 Hello World인 만큼, 화면에 출력할 내용으로&amp;nbsp;&lt;STRONG&gt;Message&lt;/STRONG&gt;라는 문자열형 속성을 추가해 보겠다.&lt;/P&gt;
&lt;P&gt;클래스 뷰에서 &lt;STRONG&gt;IHelloCtrl&lt;/STRONG&gt;을 오른쪽 클릭하고, &lt;STRONG&gt;Add - Add Property&lt;/STRONG&gt;를 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/193FF8174C218F57634498&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/193FF8174C218F57634498&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile29.uf@193FF8174C218F57634498.jpg&quot; height=&quot;391&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;속성추가 마법사가 표시되면, 문자열형 속성 이므로 BSTR을 선택하고 속성 이름으로 Message를 입력하자.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/185B18194C21904F7CFA41&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/185B18194C21904F7CFA41&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile4.uf@185B18194C21904F7CFA41.jpg&quot; height=&quot;424&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;특별한 경우가 아니라면, IDL속성 설정은 기본값을 그대로 사용하면 된다.&lt;/P&gt;
&lt;P&gt;이 과정을 거치면, IDL에는 Message속성이 추가되고, 이 속성의 실제 구현이 &lt;STRONG&gt;CHelloCtrl&lt;/STRONG&gt;에 자동으로 추가된다.&lt;br /&gt;
속성에 값을 설정하기 위한 &lt;STRONG&gt;put_Message(BSTR newVal)&lt;/STRONG&gt;과 속성값을 읽기 위한 &lt;STRONG&gt;get_Message(BSTR* pVal)&lt;/STRONG&gt;이 그것이다.&lt;/P&gt;
&lt;P&gt;간단하게, 내부의 m_strMessage변수에 값을 읽고 쓰는 정도의 처리만 구현해 보자.&lt;/P&gt;
&lt;P&gt;우선 &lt;STRONG&gt;HelloCtrl.h&lt;/STRONG&gt;에 멤버변수를 추가한다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=keyword&gt;private&lt;/SPAN&gt;&lt;SPAN&gt;: &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CString&amp;nbsp;m_strMessage;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;다음은 &lt;STRONG&gt;HelloCtrl.cpp&lt;/STRONG&gt;에 속성 구현부를 추가한다.&lt;br /&gt;
단순히 m_strMessage를 이용해 값을 읽고 쓰기만 하는 정도로 구현해 보자.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;STDMETHODIMP&amp;nbsp;CHelloCtrl::get_Message(BSTR*&amp;nbsp;pVal) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_strMessage.SetSysString(pVal); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;STDMETHODIMP&amp;nbsp;CHelloCtrl::put_Message(BSTR&amp;nbsp;newVal) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_strMessage&amp;nbsp;=&amp;nbsp;newVal; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;}&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;여기까지 했다면, 이제 속성값을 읽고 쓰여 지는지를 테스트 해 보자.&lt;br /&gt;
HelloCtrl.htm에 버튼을 하나 추가하고, 버튼이 클릭되면 Message에 값을 설정한 다음, 스크립트 경고창(alert)으로 그 내용을 보여주는 간단한 스크립트를 추가해 보자.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-c&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;lt;script&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;text/javascript&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;setAndShowMessage()&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;var&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;ctrl&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctrl.Message&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;Hello&amp;nbsp;GreenB!&quot;&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(ctrl.Message); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;/script&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;object&amp;nbsp;id=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;classid=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;CLSID:4C80B2EE-6D19-4F77-9946-DF7AD17EEE67&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&amp;lt;/object&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;input&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;button&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;onclick=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;setAndShowMessage()&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;value=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;Set&amp;nbsp;Message&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;실행하면, 예상된 결과를 볼 수 있다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/123165184C2196B56993FA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/123165184C2196B56993FA&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile2.uf@123165184C2196B56993FA.jpg&quot; height=&quot;388&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;Method 추가&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;마땅한 기능의 Method가 생각나지 않으니까,&amp;nbsp;단순하게 Message속성으로 지정된 값을 Windows Message box로 표시해 주는 ShowMessage()라는 쓸데없는-_- 함수를 만들어 보겠다. 이 함수는 사용자가 Message box에서 &quot;예&quot;를 클릭하면 TRUE를, &quot;아니오&quot;를 클릭하면 FALSE를 반환하도록 구성되어 있다.&lt;/P&gt;
&lt;P&gt;클래스 뷰에서 &lt;STRONG&gt;IHelloCtrl&lt;/STRONG&gt;을 오른쪽 클릭하고, &lt;STRONG&gt;Add - Add Method&lt;/STRONG&gt;를 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/164FFA264C21A4181A9C3C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/164FFA264C21A4181A9C3C&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile2.uf@164FFA264C21A4181A9C3C.jpg&quot; height=&quot;396&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;Method 추가 대화상자에서, Method이름과 매개변수를 추가해 준다.&lt;/P&gt;
&lt;P&gt;주의할 것은,&amp;nbsp;모든 COM Method의 반환형은 HRESULT라야 한다. 이는 사용자 논리 단위에서 사용되는 것이 아니라, COM을 호스트와 클라이언트 간의 규약이다. 사용자 논리 레벨에서의 반환값을 사용하고 싶다면, &lt;STRONG&gt;retval로 지정된 포인터형 매개변수를 사용&lt;/STRONG&gt;해야 한다.&lt;/P&gt;
&lt;P&gt;여기서는, Message box의 제목을 위한&amp;nbsp;BSTR형의&amp;nbsp;&lt;STRONG&gt;bstrCaption&lt;/STRONG&gt; 매개변수와, 반환값으로 사용될 VARIANT_BOOL*형의 &lt;STRONG&gt;lpvbResult&lt;/STRONG&gt;를 추가했다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/195790154C21A5A29AA764&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/195790154C21A5A29AA764&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile22.uf@195790154C21A5A29AA764.jpg&quot; height=&quot;424&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;CHelloCtrl에 자동으로 추가된&amp;nbsp;&lt;STRONG&gt;ShowMessage(BSTR bstrCaption, VARIANT_BOOL* lpvbResult)&lt;/STRONG&gt;함수에 다음 코드를 추가하자. 실제 구현은 단순하지만, &lt;STRONG&gt;lpvbResult&lt;/STRONG&gt;를 통해 어떻게 외부에 값을 반환하는지를 주의깊게 보시기 바란다.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-cpp&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;STDMETHODIMP&amp;nbsp;CHelloCtrl::ShowMessage(BSTR&amp;nbsp;bstrCaption,&amp;nbsp;VARIANT_BOOL*&amp;nbsp;lpvbResult) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=datatypes&gt;int&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;nMessageBoxResult&amp;nbsp;=&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::MessageBox &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;( &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetActiveWindow(),&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;m_strMessage,&amp;nbsp;bstrCaption,&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;MB_YESNO&amp;nbsp;|&amp;nbsp;MB_ICONINFORMATION &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(&amp;nbsp;nMessageBoxResult&amp;nbsp;==&amp;nbsp;IDYES&amp;nbsp;) &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*lpvbResult&amp;nbsp;=&amp;nbsp;TRUE; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;else&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*lpvbResult&amp;nbsp;=&amp;nbsp;FALSE; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;S_OK; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;Method의 동작을 확인하기 위해 스크립트 코드를 &lt;STRONG&gt;HelloCtrl.htm&lt;/STRONG&gt;에 추가하자.&lt;/P&gt;&lt;!-- Stylesheet link --&gt;&lt;LINK rel=stylesheet type=text/css href=&quot;http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css&quot;&gt;&lt;!-- Code --&gt;
&lt;DIV id=hlDiv class=dp-highlighter&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-c&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;lt;script&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;text/javascript&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;...&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;callShowMessage()&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;var&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;ctrl&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;HelloCtrl&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctrl.Message&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;Hello&amp;nbsp;GreenB!&quot;&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;(ctrl.ShowMessage(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;GreenmaruX&quot;&lt;/SPAN&gt;&lt;SPAN&gt;)&amp;nbsp;==&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;Yes&amp;nbsp;button&amp;nbsp;clicked.&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;else&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;No&amp;nbsp;button&amp;nbsp;clicked.&quot;&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;} &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;lt;/script&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;/head&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;lt;body&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;lt;input&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;button&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;onclick=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;callShowMessage()&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;value=&lt;/SPAN&gt;&lt;SPAN class=string&gt;&quot;Call&amp;nbsp;ShowMessage&quot;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;P&gt;실행시켜 보면, 컨트롤과 익스플로러에서 각각 한번씩 Message box를&amp;nbsp;표시될 것이다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/162E8F194C21A9A4745AB9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/162E8F194C21A9A4745AB9&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile24.uf@162E8F194C21A9A4745AB9.jpg&quot; height=&quot;388&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;소스코드&amp;nbsp;다운로드&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;예제 프로젝트 파일(Visual Studio 2010)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://greenmaru.tistory.com/attachment/cfile25.uf@1105E3174C21AA336389EE.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; GreenmaruX_Part2.zip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/P&gt;
&lt;P&gt;다음 글에서는, Connection point를 구현하여 컨트롤에 이벤트를 추가해 보도록 하겠다.&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-92-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-92-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-92-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>소프트웨어 개발</category>
			<category>ActiveX</category>
			<category>atl</category>
			<category>C++</category>
			<category>com</category>
			<category>MS</category>
			<category>visualc++</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/92</guid>
			<comments>http://greenmaru.com/92#entry92comment</comments>
			<pubDate>Wed, 23 Jun 2010 15:31:59 +0900</pubDate>
		</item>
		<item>
			<title>ATL ActiveX 만들기 - Part1. 프로젝트 구성</title>
			<link>http://greenmaru.com/91</link>
			<description>&lt;P&gt;요즘은 확실히 ActiveX 사용이 눈에 띄게 줄어들긴 했지만, 아직도 정신 못차리고(-_-) ActiveX를 요구하는 사람들도 가끔 있다. 아마 앞으로도 한동안은 ActiveX가 필요한 경우가 간혹 있을지도 모르니까, 방법을 다 잊어버리기 전에 요점만 정리해 두자.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;개요&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Visual C++를 이용해 ATL ActiveX를 만들어 보겠다. 작성할 어플리케이션은 그 유명한 &lt;STRONG&gt;Hello World&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;이 문서에서 ActiveX를 만드는데 필요한 모든 정보를 적을 수는 없으므로(이렇게 되면 책 몇권 분량-_-) Visual C++과 Windows API, ATL에 어느정도 익숙하다는 가정하에 진행하겠다.&lt;/P&gt;
&lt;P&gt;주요 내용은 다음과 같이 작성하려고 한다.&lt;/P&gt;
&lt;UL style=&quot;LIST-STYLE-TYPE: disc&quot;&gt;
&lt;LI&gt;ATL기반 ActiveX를 만드는 기본적인 순서&lt;/LI&gt;
&lt;LI&gt;Windows Vista / 7이상에서 권한 상승(Elevation)을 통해 실행되도록 하기위한 처리&lt;/LI&gt;
&lt;LI&gt;컨트롤에서 이벤트를 발생시키고, 이 이벤트를 처리&amp;nbsp;하기위한 Java script.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;컨트롤 만들기&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;1. Visual Studio를 관리자 권한으로 실행한다.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;컨트롤을&amp;nbsp;컴파일 할 때 레지스트리에 COM개체 정보를 등록하는 과정을 거치게 되는데, 일반사용자 모드에서는 권한 오류가 발생한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/113AF5164C2059BF0C19AA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/113AF5164C2059BF0C19AA&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile5.uf@113AF5164C2059BF0C19AA.jpg&quot; height=&quot;154&quot; width=&quot;200&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;2. ATL 프로젝트를 만든다.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;File&amp;nbsp;- New - Project&lt;/STRONG&gt; 메뉴를 클릭하고, 새 프로젝트 대화상자에서 &lt;STRONG&gt;Visual C++ - ATL Project&lt;/STRONG&gt;를 선택한다.&amp;nbsp;적당한 프로젝트 이름을 입력하자.&lt;br /&gt;
아시다시피,&amp;nbsp;프로젝트 이름은 실행파일(DLL)의 이름으로 사용된다. 예제에서는 GreenmaruX라고했다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/1775FB174C2069C225CC41&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/1775FB174C2069C225CC41&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile23.uf@1775FB174C2069C225CC41.jpg&quot; height=&quot;310&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;우리는 웹 브라우저에서 동작하는 단순 ActiveX 컨트롤을 만들 것이므로, 기본 설정을 그대로 사용해 주면 된다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/177B74194C206A33352CB2&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/177B74194C206A33352CB2&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;Snap5.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;3. COM 개체를 추가한다.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;하나의 패키지(DLL)안에는 여러개의 COM개체를 추가할 수 있다. 물론, 일반적으로는 하나의 DLL = 하나의 ActiveX 컨트롤이지만.&lt;/P&gt;
&lt;P&gt;하나의 컨트롤을 추가하자. 솔루션 탐색기에서 프로젝트를 선택하고 &lt;STRONG&gt;Add - Class&lt;/STRONG&gt;를 클릭한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/180EF6154C206B6C2806D9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/180EF6154C206B6C2806D9&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile5.uf@180EF6154C206B6C2806D9.jpg&quot; height=&quot;425&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;클래스 추가 대화상자에서 &lt;STRONG&gt;Visual C++ - ATL - ATL Control&lt;/STRONG&gt;을 선택하고 &lt;STRONG&gt;Add&lt;/STRONG&gt;버튼을 클릭한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/157D1B194C206D27463642&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/157D1B194C206D27463642&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile29.uf@157D1B194C206D27463642.jpg&quot; height=&quot;310&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;4. COM 개체 설정&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ATL Control wizard에서 적절한 값들을 설정해 준다. 이 단계는 크게 5단계로 구성된다.&lt;/P&gt;
&lt;P&gt;4.1) Names: 컨트롤의 이름을 설정한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/141DE1194C206EB30CAB24&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/141DE1194C206EB30CAB24&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile1.uf@141DE1194C206EB30CAB24.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;UL style=&quot;LIST-STYLE-TYPE: square&quot;&gt;
&lt;LI&gt;Short names: 컨트롤의 이름.&lt;/LI&gt;
&lt;LI&gt;.h/.cpp file: 파일 이름.&lt;/LI&gt;
&lt;LI&gt;Class: 클래스의 이름. Visual C++의&amp;nbsp;기본 naming rule인 &quot;C&quot;접두어를 붙여준다.&lt;/LI&gt;
&lt;LI&gt;Coclass: COM 개체 class 이름. Short name과 동일하게 설정&lt;/LI&gt;
&lt;LI&gt;Type: 이 개체의 설명. 나중에 IE의 개체 추가/삭제 창에서 설명에 나올 텍스트로 사용된다.&lt;/LI&gt;
&lt;LI&gt;Interface: COM Interface 이름.&lt;/LI&gt;
&lt;LI&gt;ProgID: Program ID를 특별히 명시하고 싶은 경우라면 적어준다.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;특별한 경우가 아니라면, &lt;STRONG&gt;Short name과 Type만 적당히 입력&lt;/STRONG&gt;해 주고, 나머지는 기본값을 그대로 사용하면 된다. 예제의 컨트롤 이름은 &lt;STRONG&gt;HelloCtrl&lt;/STRONG&gt;이다.&lt;/P&gt;
&lt;P&gt;4.2) Options: 컨트롤의 세부 설정을 지정한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/147B58154C2070188FAD11&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/147B58154C2070188FAD11&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile9.uf@147B58154C2070188FAD11.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;UL style=&quot;LIST-STYLE-TYPE: square&quot;&gt;
&lt;LI&gt;Control type: 보통은 Standard control로 설정한다. Windows Form과 비슷한 컨트롤을 작성하려면 Composite control을, DHTML을 사용하려면 DHTML을 사용한다.&lt;/LI&gt;
&lt;LI&gt;Minimal control: 최소한의 COM 인터페이스만을 구현하도록 한다. 이 예제는 IE에서만 동작하면 되므로 체크해 두었다. VB나 VC등으로 만든 다른 어플리케이션에서 사용되어야 하는 컨트롤이라면 체크하지 말자.&lt;/LI&gt;
&lt;LI&gt;Connection points: 컨트롤이 외부에 이벤트를 공개해야 한다면 선택하자. 예제에서는 이벤트 사용 예제를 위해 체크해 두었다.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;그 외, Aggregation, Threading model, Interface, Licensed등은 이 예제에서 다루는 수준을 넘어가는 항목들 이므로, 기본값을 그대로 사용하자.&lt;/P&gt;
&lt;P&gt;예제에서는 &lt;STRONG&gt;Minimal Control, Connection Points&lt;/STRONG&gt;를 체크했다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;4.3) Interfaces: 컨트롤이 구현해야 할 인터페이스를 정의한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/original/1579E4154C2072BD9B17A8&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/1579E4154C2072BD9B17A8&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile30.uf@1579E4154C2072BD9B17A8.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;Minimal control을 선택했다면 구현 인터페이스 목록(Supported)이 비어있을 것이다. 대충 다음 인터페이스 정도는 구현해 두도록 하자.&lt;/P&gt;
&lt;UL style=&quot;LIST-STYLE-TYPE: square&quot;&gt;
&lt;LI&gt;IObjectSafety: 컨트롤이 스크립트, 초기화 등에 안전함을 컨테이너가 인식할 수 있도록 한다.&lt;/LI&gt;
&lt;LI&gt;IPropertyNotifySink: 컨트롤에서 변경된 속성을 즉시 사용할 수 있도록 해 준다.&lt;/LI&gt;
&lt;LI&gt;IProvideClassInfo2: 이벤트 사용을 위해서는 반드시 필요하다. Connection Point를 구현하는 경우라면 반드시 포함시키자.&lt;/LI&gt;
&lt;LI&gt;IQuickActivate: 빠른 활성화를 위한 인터페이스인데.. 그냥 기분상(?) 구현해 두자.&lt;/LI&gt;
&lt;LI&gt;ISupportErrorInfo: 컨트롤에서 발생한 예외(Exception)을 컨테이너가 처리할 수 있도록 해 준다.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;기타, 언급되지 않은 인터페이스는 구글에서 검색해 보시기 바란다.&lt;br /&gt;
예제에서는 위의 인터페이스들을 모두 구현하도록 했다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;4.4) Appearance: 컨트롤의 모양을 정의한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/1317FA154C2074E842DA53&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1317FA154C2074E842DA53&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile7.uf@1317FA154C2074E842DA53.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;다른 항목들은 기본값을 그대로 사용하거나, 구글 검색을 해 보시고..&lt;br /&gt;
Based on에서는 윈도우 표준 컨트롤에서 상속받고 싶은 경우 부모 컨트롤을 선택할 수 있으니, 필요한 경우 선택한다.&lt;/P&gt;
&lt;P&gt;예제에서는 기본값을 그대로 사용한다.&lt;/P&gt;
&lt;P&gt;4.5) Stock Properties: 기본제공 속성 사용&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/120B44154C2075C861015D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/120B44154C2075C861015D&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile7.uf@120B44154C2075C861015D.jpg&quot; height=&quot;381&quot; width=&quot;450&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;대부분의 컨트롤에서 공통적으로 사용할 수 있을법한 속성들을 지원할 것인지를 결정한다. 살펴보고, 지원하고 싶은 속성이 있다면 추가해 준다. 기본 속성을 사용하는 쪽이 컨트롤 사용자(개발자) 입장에서는 일관성 있고 보다 직관적일 것이다.&lt;/P&gt;
&lt;P&gt;예제에서는 내장 속성을 선택하지 않았다. 모두 설정했으면 Finish를 클릭해 준다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;컴파일 및 프로젝트 Re-load&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Visual Studio의 버그일 것으로 생각되는 문제인데.. 일단 한번 컴파일 해 준 다음, 프로젝트를 닫았다가 다시 불러와야 클래스가 정상적으로 표시된다.&lt;/P&gt;
&lt;P&gt;Build-Build Solution 해 준 다음, File - Close Solution을 클릭하자. 그리고 다시 FIle- Open을 통해 GreenmaruX.sln파일을 불러 들인다.&lt;/P&gt;
&lt;P&gt;다음 글에서 나머지 설정과 컨트롤에 속성과 동작(Method)을 추가해 보겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;다운로드&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;예제 프로젝트 파일(Visual Studio 2010)&amp;nbsp;&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://greenmaru.tistory.com/attachment/cfile5.uf@19032A184C215FC0A02AAE.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; GreenmaruX_Part1.zip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;덧. 댓글이 많이 달리면 다음 포스팅이 빨라 진다던데....-_-)y-~~~&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-91-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-91-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-91-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>소프트웨어 개발</category>
			<category>ActiveX</category>
			<category>atl</category>
			<category>C++</category>
			<category>com</category>
			<category>MS</category>
			<category>visualc++</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/91</guid>
			<comments>http://greenmaru.com/91#entry91comment</comments>
			<pubDate>Tue, 22 Jun 2010 17:42:55 +0900</pubDate>
		</item>
		<item>
			<title>정대세의 눈물</title>
			<link>http://greenmaru.com/90</link>
			<description>&lt;P&gt;2010년 남아프리카 공화국 월드컵의 열기로 뜨거운 요즘&amp;nbsp;- 내가 응원하는 팀은 대한민국, 일본, 북한이다.&lt;br /&gt;
한국을 빼고는, 왠지 위험한(?) 팀들만 응원하고 있군 -_-;&lt;/P&gt;
&lt;P&gt;아무튼.&lt;br /&gt;
한국은&amp;nbsp;예상보다 멋진 경기를 보여줬고, 일본은 예상보다 답답한 경기였지만 - 두 팀 모두 강팀(그리스, 카메룬)을 상대로한 첫 게임을 승리로 이끌어내고 16강에 한발짝 다가가고 있다.&lt;/P&gt;
&lt;P&gt;그리고 북한은 - 죽음의 조(북한, 브라질, 포르투갈, 코트디부아르)에&amp;nbsp;끼어 있어서 사실 큰 기대는 안했는데..&lt;br /&gt;
세계 1위 브라질을 상대로 2-1로 아깝게(!) 지고 말았다.&amp;nbsp;결국 지긴 했지만 그래도 정말 멋진 경기였다.&lt;/P&gt;
&lt;P&gt;북한이라는 나라와는 별개로, 여러가지로 어려움이 많았을텐데 좋은 경기를 보여준 선수들에게 박수를 보낸다.&lt;/P&gt;
&lt;P&gt;특히, 시합을 시작할 때 북한국가 연주에서 정대세 선수가 눈물을 흘릴때는, 보는 나까지 왠지 뭉클 하더라.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/174C7B164C1862B23DB082&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/174C7B164C1862B23DB082&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;20100616065606196.jpg&quot; height=&quot;646&quot; width=&quot;430&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;한국인 아버지와 조선인 어머니. 분단된 조국에 대한 갈등. 일본땅에서 태어나 조선인으로 살아가기 위해 받았을 많은 상처들. 국적 선택과 북한 유니폼....&lt;/P&gt;
&lt;P&gt;그 모든 과정을 거쳐&amp;nbsp;꿈에 그리던 월드컵 무대에 섰을 때는 누구라도 눈물을 흘릴 수 밖에 없지 않을까.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;아무튼.&lt;/P&gt;
&lt;P&gt;앞으로 남은 두 경기도&amp;nbsp;쉽지는 않겠지만, 정대세 선수는 물론 북한 선수들 모두 끝까지 최선을 다 해주길 바란다.&lt;br /&gt;
남과 북이 함께 16강에서 만날 수 있기를 진심으로 응원 하겠다!&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-90-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-90-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-90-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>일상</category>
			<category>북한</category>
			<category>월드컵</category>
			<category>축구</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/90</guid>
			<comments>http://greenmaru.com/90#entry90comment</comments>
			<pubDate>Wed, 16 Jun 2010 14:36:09 +0900</pubDate>
		</item>
		<item>
			<title>아이폰이 땡긴다 -_-</title>
			<link>http://greenmaru.com/89</link>
			<description>&lt;P&gt;얼마전 같은 팀 사람들과 워크샵을 다녀왔는데..&lt;br /&gt;
펜션 마당에서 소주와 삼겹살을 구워 먹다가, 서로를 풀장에&amp;nbsp;넣어주는 정겨운 이벤트-_-가 있었다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/11764D164C11F113423F4D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/11764D164C11F113423F4D&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;DSC_0076.jpg&quot; height=&quot;332&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;덕분에 산지 6개월된 내 아몰레드 핸드폰이 침수...OTL&lt;/P&gt;
&lt;P&gt;내가! 응? 주머니에! 응? 핸드폰 있다는데!! 으흙흙흐규ㅠㅠㅠㅠ&lt;br /&gt;
그냥 응? 막 밀어넣고! 응?ㅠㅠㅠㅠㅠ&lt;/P&gt;
&lt;P&gt;아무튼..&lt;/P&gt;
&lt;P&gt;그 이후로 내 전화기의 배터리가 불과 3시간을 못넘기고 운명하고 계신다.&lt;/P&gt;
&lt;P&gt;그런 와중에 &lt;SPAN style=&quot;FONT-SIZE: 14pt&quot;&gt;&lt;STRONG&gt;딱 맞춰서 아이폰 4G가 7월에 출시&lt;/STRONG&gt;&lt;/SPAN&gt;된다고.....&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/144FCA174C11F5BC152AB8&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/144FCA174C11F5BC152AB8&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;Snap1.jpg&quot; height=&quot;675&quot; width=&quot;561&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;짤방은 2010년 6월 11일 오마이뉴스 만평&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;아... 어쩐지 요즘 아이폰 광고가 눈에 밟힌다... 후.... 한동안 잠잠하던 지름신께서 깨어나시는구나~ 얼쑤~&lt;/P&gt;
&lt;P&gt;빨리 7월이 되면 좋겠넴 -ㅅ-&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-89-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-89-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-89-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>일상</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/89</guid>
			<comments>http://greenmaru.com/89#entry89comment</comments>
			<pubDate>Fri, 11 Jun 2010 17:38:18 +0900</pubDate>
		</item>
		<item>
			<title>요즘은</title>
			<link>http://greenmaru.com/88</link>
			<description>&lt;P&gt;한동안 블로그질을 안하다가&amp;nbsp;반년만에 글을 쓰려니 뭔가 어색하네요 -_-;&lt;/P&gt;
&lt;P&gt;아무튼, 간혹 궁금해 하시는 분들이 계셔서 요즘의 근황을 말씀 드리자면.. 그냥 &quot;아무 생각 없이&quot; 보냈습니다.&lt;br /&gt;
저와 마키의 미래에 대한 고민. 일과 관련된 고민. 제 진로에 대한 고민. 가족과 관련된 고민&amp;nbsp;등등 여러가지 고민에 파뭍혀 머리속이 복잡했거든요.&lt;/P&gt;
&lt;P&gt;언젠가 재미삼아 친구랑 점을 보러 갔는데, 점 보시는 분이&amp;nbsp;제 얼굴을 보자마자 대뜸 &quot;왜이리 정신 사나워!&quot; 하셔서 조금 웃었습니다.ㅎㅎㅎ&lt;/P&gt;
&lt;P&gt;뭐 지금도 명쾌한 상태는 아닙니다만.. 그래도 조금씩 정리해 가고 있습니다.&lt;/P&gt;
&lt;P&gt;회사에서는 WPF를 이용한 신제품을 개발하고 있구요.&lt;br /&gt;
일본어 공부는 요즘 좀 지겨워 하다가.. 다시 마음을 가다듬고 있구요.&lt;br /&gt;
마키와는 가끔씩 다툴때도 있긴 하지만, 여전히 알콩달콩&amp;nbsp;잘 지내고 있습니다.&lt;br /&gt;
한동안 끊었던 와우도 요즘 다시 하고있네요.&amp;nbsp;오랜만에 하니까 더 재미있더라는...-_-&lt;br /&gt;
그리고, 요즘 배가 나와서 좀 걱정하고 있어요. 이제는 완벽한 ET몸매가 되어버렸습니다..OTL&lt;/P&gt;
&lt;P&gt;아, 여전히 파란색 1번과 아파트값에 목숨거는 사람들이 너무 많은데다가... 차기 대통령에 다카키 마사오의 딸이 거론되는 것 때문에 한국이라는 나라에 조금 더 정이 떨어졌다는 것도 추가하겠습니다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;아무튼 뭐. 계속 주저앉아서 징징대고 있는것도 제가 원하는 제 모습은 아니니까 기운 내야겠죠!&lt;/P&gt;
&lt;P&gt;요즘 날씨가 너무 덥네요~ 즐거운 일은 별로 없지만 웃어야 겠습니다.&lt;br /&gt;
방문해 주신 모든 분들도 활기차고 즐거운 하루 되시길 바랄께요! :)&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/original/1110C5184C0F27583B25AD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/1110C5184C0F27583B25AD&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;528109876_1261312087_tpgmltpgml32.jpg&quot; height=&quot;435&quot; width=&quot;580&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-88-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-88-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-88-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>일상</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/88</guid>
			<comments>http://greenmaru.com/88#entry88comment</comments>
			<pubDate>Wed, 09 Jun 2010 14:32:49 +0900</pubDate>
		</item>
		<item>
			<title>일본에서 운전하기</title>
			<link>http://greenmaru.com/87</link>
			<description>&lt;P&gt;일본에 놀러 갔을 때, 잠깐씩 자동차를&amp;nbsp;운전해 본 이야기.&lt;br /&gt;
우선, 내 운전실력은,&amp;nbsp;10년정도&amp;nbsp;경력에 그다지 큰 사고는 없었고 운전에는 어느정도 자신있는 편이라고 해 두겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;일단, 일본에 여행가서 자동차를 운전하려면 (당연하게도) 국제 운전면허가 있어야 한다.&lt;br /&gt;
국제면허는 운전면허 시험장에 수수료만 가져가면 간단하게 발급 받을 수 있다.&lt;br /&gt;
...하지만&amp;nbsp;나는&amp;nbsp;국제면허를 발급받지 않은 상태에서 불법으로 운전했다. -_-; (경찰한테 잡혔으면 난리날뻔 ㄷㄷ)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;사실, 운전하는것 자체로는 큰 문제가 될 것은 없지만, 문제는 핸들이 우리나라와 반대에 위치 - 우핸들 - 한다는 점이다. 이게 생각보다 적응하는데&amp;nbsp;어려웠다.&lt;br /&gt;
한국에서도 가끔 우핸들 차를 모는 분들이 계신데.. 진짜 어떻게 잘 운전하고 다니는지 궁금할 정도다.&lt;br /&gt;
몸에 익숙한 각도(룸미러, 사이드미러나 네비게이션 등)가 완전히 반대로 뒤집히는건 상당히 어색한 느낌이다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/144DC2264C0E30715F22D1&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/144DC2264C0E30715F22D1&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;IMG_2608.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;패달의 순서(클러치 - 브레이크 - 악셀레이터)는 동일하지만,&amp;nbsp;핸들에 붙어있는 레버들은 한국과 대칭이라서 왼쪽이 와이퍼 작동, 오른쪽이 깜빡이(Winker) 작동 레버다.&lt;br /&gt;
아무 생각없이 깜빡이 넣으면 와이퍼가 작동해서 당황하게 한다. -_-;&lt;/P&gt;
&lt;P&gt;물론, 기어 레버도 왼손으로 조작해야 한다. 내 첫차가 수동(스틱) 이었기 때문에, 한국에서라면 수동 자동차를 모는데 크게 불편한 적은 없었지만, 일본에서라면 수동 자동차를 모는건 무리일 것 같다.&amp;nbsp;(다행히 마키의 자동차는 오토매틱 이다 ㅋㅋ -_-;)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;여기에 어느정도 적응하고 나면, 그다음&amp;nbsp;정말 큰 문제. &lt;STRONG&gt;주행 방향이 반대&lt;/STRONG&gt;라는 점이다.&amp;nbsp;-0-;;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/1222BD194C0E31E3365ACD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/1222BD194C0E31E3365ACD&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;IMG_2212.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;이건 정말 적응하기 힘들어서, 나도 모르게 차를 자꾸 오른쪽으로 붙이게 된다.&lt;br /&gt;
그나마 도심지의 큰 길에서 다른차들과 함께 진행하고 있을때는 별 문제 없지만, 한적한 길이나 교차로에서는 머리보다 몸이 먼저 반응하는 문제가 있다.&lt;/P&gt;
&lt;P&gt;특히,&amp;nbsp; 중앙선이 노란색으로 구분되지 않고, 일반 차선과 동일한 하얀색 실선으로 표시된 곳이&amp;nbsp;많아서 더 헛갈리게 만든다. 조금만 방심하면 역주행 차선에서 질주를 즐길 수 있다... -_-;&lt;/P&gt;
&lt;P&gt;고속 도로에서도, 항상 왼쪽에 있던 가드레일이 오른쪽에 있을때의&amp;nbsp;어색함에서 오는 스트레스가 꽤 컸다.&lt;br /&gt;
게다가, 느낌탓인지는 모르겠지만, 도심지의 대로를 제외하고는 차선의 폭도 우리나라보다 조금 더 좁게 느껴진다.&lt;/P&gt;
&lt;P&gt;물론,&amp;nbsp;좌회전과 우회전도&amp;nbsp;반대다. 좌회전은 신호 없이 가능한 지역도 있지만 (좌회전 신호가 별도로 있는 곳도 많으니 주의!!) 우회전은 항상 신호를 받고 진행해야 한다.&lt;/P&gt;
&lt;P&gt;일본에서의 운전이 좋은점이라면, 한국에서와 같은 고난이도(?) 핸들링이나, 무조건 빠른 진행이 필요한 경우는 별로 없다는 점이다. 그냥 적당히 자기 페이스로 운전해 주면 크게 무리는 없으니까 안심하시고 익숙해 질 때 까지는, 절대 조급해 하지&amp;nbsp;말고 서행하시길 바란다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;여기서 잠깐.&lt;br /&gt;
&lt;STRONG&gt;왜 일본과 우리나라는 서로 반대 방향으로&amp;nbsp;도로와 자동차를 만들었을까?&lt;/STRONG&gt;&lt;br /&gt;
언뜻 생각하면, 일제 강점기를 거치면서 우리나라도 일본과 같은 좌측통행을 하도록 했을법도 한데 말이다.&lt;/P&gt;
&lt;P&gt;일단, 자동차가 좌측통행을 하는 방식은 영국식 이라고 한다.&lt;br /&gt;
마차를 몰 때&amp;nbsp;운전사가 오른쪽에 앉아야만 손님이 말 채찍에 맞는일이 없었고(보통 오른손 잡이니까), 운전사가 오른쪽에 앉다보니 자연히 마차들이 좌측통행을 하게 되었다고 한다.&lt;/P&gt;
&lt;P&gt;또, 기사들이 보통 칼을 왼쪽허리에 차고 말을 타기 때문에, 좌측통행을 해야만 마주오는 다른 기사의 칼과 부딪히는 일을 방지할 수 있었다는 이야기도 있다.&lt;/P&gt;
&lt;P&gt;비교적 일찍부터 서양과 교류했던 일본은, 영국의 영향을 받아 좌측통행 + 우핸들&amp;nbsp;도로를 만들게&amp;nbsp;된 것이다.&lt;/P&gt;
&lt;P&gt;그렇다면 우리나라는?&lt;br /&gt;
이 이야기도 꽤 옛날까지 거슬러 올라가야 하는데, 영국과 역사적인&amp;nbsp;앙숙 프랑스 때문이다.&lt;br /&gt;
두 나라는 서로 상대방의 관습을 무시하는 풍토가 있었고,&amp;nbsp;따라서&amp;nbsp;프랑스는 무조건 영국과 반대되는 우측통행 방식을 고집하게 되었다고 한다. (이런 바보같은-_-)&lt;/P&gt;
&lt;P&gt;여기에, 미국또한 영국으로 부터 &#039;독립전쟁&#039;을 치른 터라 프랑스와 같은 우측 통행을 따르게 되었고.. 이러한 미국방식을&amp;nbsp;우리가 받아들이게 되면서&amp;nbsp;현재와 같은 우측통행을 하게 되었다고 한다.&lt;/P&gt;
&lt;P&gt;아마도, 일제 강점기 당시는 한국에서 자동차가 크게 사용되지 않았을 테고, 해방&amp;nbsp;이후 미국이 적극적으로 개입할 때,&amp;nbsp;이런 방식으로 정해진 것이 아닐까 추측해 본다. (미국인들이 편하게 운전할 수 있는 방식으로~)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;아무튼. 혹시나 일본에 여행가서 자동차를 운전하게 되신다면.. 첫째도 둘째도 서행하시길 다시한번 부탁 드린다.&lt;br /&gt;
한국에 비해 &quot;빨리빨리&quot;는 확실히 덜 하니까, 마음 편안히 먹고 안전운행 하시길! :)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/1505D0244C0EF4110376A6&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/1505D0244C0EF4110376A6&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;IMG_2592.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;고속도로 휴개소에서 만난 남자의 로망 빨간색 클래식 페라리!&amp;nbsp; +_+&lt;br /&gt;
재미있는건, 이 차는 좌핸들 이라서 톨게이트에서는 운전자가 직접 내려서 티켓을 뽑더라는-_-;&lt;/P&gt;
&lt;P&gt;...그러고 보니 우리나라에서 우핸들 차를 모시는 분들은, 티켓 뽑을 때 어떻게 하는거지?&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-87-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-87-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-87-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;	        
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=7420335&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;</description>
			<category>여행과맛집</category>
			<category>여행</category>
			<category>일본</category>
			<category>일본여행</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/87</guid>
			<comments>http://greenmaru.com/87#entry87comment</comments>
			<pubDate>Tue, 08 Jun 2010 21:34:33 +0900</pubDate>
		</item>
		<item>
			<title>전차남(電車男) - 오타쿠 신데렐라 이야기</title>
			<link>http://greenmaru.com/86</link>
			<description>&lt;P&gt;일본의 유명한 인터넷 커뮤니티 2ch에서 있었던 이야기를 소재로한 &quot;나가노 히토리&quot;의 베스트 셀러를 바탕으로 한 TV드라마. 원작 소설은 물론, 영화와 드라마도 크게 성공해서, 2005년 일본에서 드라마가 방영되었을 즈음에는 실제로 오타쿠에 대한 여성들의 인기가 조금은 올라갔을 정도라고 한다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/186CCE034B9387A492BB0C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/186CCE034B9387A492BB0C&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;200908111417191001_1.jpg&quot; height=&quot;300&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;아무튼, 한국이던 일본이던 드라마에 별로 관심없는 나같은 사람도&amp;nbsp;대충의 내용을 알고 있었을 정도로 유명한 이야기인데.. 작년 가을쯤 일본어 공부라는&amp;nbsp;핑계로 보게되었다. 그리고 지금까지 다섯번은 다시 본 것 같다 -_-;&lt;br /&gt;
(하지만 사투리나 속어가 많이 나와서, 초급자의 일본어 공부에는&amp;nbsp;별로 도움이 되지 않는다...OTL)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;STRONG&gt;대충의 이야기는.. &lt;/STRONG&gt;
&lt;P&gt;22년동안 연애경험 이라고는 조금도 없는 애니메이션 오타쿠 야마다 쯔요시(이토 아츠시)는, 어느날 전차안에서&amp;nbsp;취객으로부터 곤경에 처한 아오야마 사오리(이토 미사키)를 돕게된다.&lt;/P&gt;
&lt;P&gt;사오리는 한눈에 반할 정도의 미모와 성품을 갖춘 &#039;엄친딸&#039;이미지의 여성이었고..&lt;br /&gt;
쯔요시는 이 사건을 시작으로 독신남 게시판에서 상담하게 되고, 게시판의 오타쿠들은 아낌없는 충고와 격려로 성심을 다해 쯔요시를 돕는다.&lt;/P&gt;
&lt;P&gt;결국 누가봐도 한심한 오타쿠일 뿐이던 쯔요시는 점차 멋진 남자로 성장해 가고, 여러 우여곡절 끝에 결국 야마다와 사오리가&amp;nbsp;사랑하게 된다는 이야기-&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/195ED71A4B939B50B568B9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/195ED71A4B939B50B568B9&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile10.uf@195ED71A4B939B50B568B9.jpg&quot; height=&quot;168&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;너무 뻔하고, 충분히 유치한&amp;nbsp;스토리지만!&lt;br /&gt;
&quot;로맨틱 코메디&quot;는 결말에 대한 반전이나 현실성 보다는 그 과정을 얼마나 두근두근하게 풀어가는가 하느게&amp;nbsp;중요하다는 말씀!&lt;/P&gt;
&lt;P&gt;드라마의 가장 현실적이면서도 비현실적인 부분은 &quot;야마다 쯔요시&quot;를 연기하는 이토 아츠시다.&lt;br /&gt;
대부분의 신데렐라 스토리는 별 볼일 없는 여자가 어느날 백마탄 왕자님의 사랑을 얻게되어 팔자 고치게 된다는 이야기인데 반해, 전차남 야마다는 성격, 외모, 재력 등 어떤 부분에서도 왕자님 보다는 오히려 여러가지&amp;nbsp;열등감과 단점들을&amp;nbsp;품고 살아가는 현실속 보통 남자들의 모습이다.&lt;br /&gt;
그런 그의 모습에 감정이입&amp;nbsp;할 수 밖에 없는 것은&amp;nbsp;이토 아츠시의 뛰어난 연기에서 비롯된다.&lt;br /&gt;
사실 미남이라고는 하기 힘든 얼굴과 작고 외소한 그의 외모도 한 몫 거들긴 하지만..&lt;br /&gt;
어쨌든,&amp;nbsp;그는 마치 야마다를 연기하기 위해 태어난 사람같은 느낌이다.&lt;/P&gt;
&lt;P&gt;덕분에 가장 비현실적인 포인트는 그런 야마다를 누가봐도 완벽한 에르메스(HERMES: 극중 아오야마 사오리의 별칭)가 사랑하게&amp;nbsp;된다는 결말인 것이다!! (음?-_-;;;)&lt;br /&gt;
드라마속의 에르메스는, 예쁘고 날씬하며, 돈 많고, 이해심과 배려심이 깊고 상냥하며 교양있는, 남자의 어떤 것이라도 존중하지만, 가끔은 누나처럼 남자를 리드해가는 - 남자라면 누구나&amp;nbsp;사랑할 수 밖에 없는,&amp;nbsp;이상형의 여인 바로 그 모습이니까...(꺄아!! *-_-*)&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#c2c2c2&gt;다른말이지만, 11편의 에르메스를 보고 있으면 정말 심장이 터질 것 같다능!! 하악하악 (마키짱 미안 -_-*)&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;이런 여자가 별볼일 없는 쯔요시와 사랑에 빠지게 된다는건 너무도 비현실 적이지만!! 하지만, 내심 그런 결말을 바라게 되는 복잡미묘한(?) 심정에 빠지게 되는것이다. (비로서 난 아줌마들이 말도 안되는 드라마에 중독되는 이유를 조금은 이해하게 됐다.;;)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;아무튼,&amp;nbsp;전차남 커플을 비롯해, 각자의 특징과 이야기를 가진 미워할 수 없는 캐릭터들이 함께 울고 웃으며 이야기를 만들어 간다. (코믹요소는 상당히 마음에 들지만, 눈물 포인트는 간혹 조금 억지스러운 구석도 있긴하다.)&lt;/P&gt;
&lt;P&gt;여러가지로 현실성 보다는 애니메이션 분위기의 드라마. 가벼운 마음으로 보면 재미있게 울고 웃으며 시간을 보내게 된다. 손발이 오글오글 하지만, 끝까지 보고나면 행복해 지는 드라마니까 꼭 보시기 바란다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
11편의 본편이 끝난다음, 스패셜판 이라는 외전이 나오는데 - 여기서는 한국인 호스티스와 야구 오타쿠의 사랑이야기가 메인 스토리로 진행된다.&lt;br /&gt;
솔직히, 한국인이 호스티스로 나온다는 설정이 조금 불편하긴 하지만 - 그것을 너무 심각하게 받아들이지 않는다면 특별편도 재미있게 볼만하다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/205D201F4B93A01E1A22CE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/205D201F4B93A01E1A22CE&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;IMG_3264.jpg&quot; height=&quot;375&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;덧: 결국, 어찌나 감동(?)을 받으셨던지,&amp;nbsp;마키한테 부탁해서 전차남 DVD도 구입했다능~&lt;br /&gt;
사실 내 혈관속에는 오타쿠의 피가 흐르고 있는건 아닐까 라는 생각을&amp;nbsp;다시한번 하게 됐다능~ -ㅅ-;;&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-86-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-86-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-86-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;	        
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=6075308&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;</description>
			<category>잡동사니</category>
			<category>드라마</category>
			<category>일본</category>
			<author>그린B</author>
			<guid>http://greenmaru.com/86</guid>
			<comments>http://greenmaru.com/86#entry86comment</comments>
			<pubDate>Sun, 07 Mar 2010 21:47:25 +0900</pubDate>
		</item>
	</channel>
</rss>
