개요
Visual C++을 이용해 ATL ActiveX를 만들어 보겠다. 작성할 어플리케이션은 그 유명한 Hello World.
이 블로그에서 ActiveX를 만드는데 필요한 모든 정보를 적을 수는 없으므로(이렇게 되면 책 몇권 분량-_-) Visual C++과 Windows API, ATL에 어느정도 익숙하다는 가정하에 진행하겠다.
이 포스트에서 다룰 내용은 다음과 같다.
- ATL기반 ActiveX를 만드는 기본적인 순서
- Windows Vista / 7이상에서 권한 상승(Elevation)을 통해 실행되도록 하기위한 처리
- 컨트롤에서 이벤트를 발생시키고, 이 이벤트를 처리 하기위한 Java script.
컨트롤 만들기
1. Visual Studio를 관리자 권한으로 실행한다.
2. ATL 프로젝트를 만든다.
File - New - Project 메뉴를 클릭하고, 새 프로젝트 대화상자에서 Visual C++ - ATL Project를 선택한다. 적당한 프로젝트 이름을 입력하자.
아시다시피, 프로젝트 이름은 실행파일(DLL)의 이름으로 사용된다. 예제에서는 GreenmaruX라고했다.
아시다시피, 프로젝트 이름은 실행파일(DLL)의 이름으로 사용된다. 예제에서는 GreenmaruX라고했다.
3. COM 개체를 추가한다.
하나의 패키지(DLL)안에는 여러개의 COM개체를 추가할 수 있다. 물론, 일반적으로는 하나의 DLL = 하나의 ActiveX 컨트롤이지만.
4. COM 개체 설정
ATL Control wizard에서 적절한 값들을 설정해 준다. 이 단계는 크게 5단계로 구성된다.
- Short names: 컨트롤의 이름.
- .h/.cpp file: 소스 파일 이름.
- Class: 클래스의 이름. VC++의 기본 naming rule인 "C"접두어를 붙여준다.
- Coclass: COM 개체 class 이름. Short name과 동일하게 설정
- Type: 개체 설명. 나중에 IE의 개체 추가/삭제 창에서 설명에 나올 텍스트로 사용된다.
- Interface: COM Interface 이름.
- ProgID: Program ID를 특별히 명시하고 싶은 경우라면 적어준다.
특별한 경우가 아니라면, Short name과 Type만 적당히 입력 해 주고, 나머지는 기본값을 그대로 사용하면 된다. 예제의 컨트롤 이름은 HelloCtrl이다.
- Control type: 보통은 Standard control로 설정한다. Windows Form과 비슷한 컨트롤을 작성하려면 Composite control을, DHTML을 호스팅해서 UI를 구성하려면 DHTML을 사용한다.
- Minimal control: 최소한의 COM 인터페이스만을 구현하도록 한다. 이 예제는 IE에서만 동작하면 되므로 체크해 두었다. VB나 VC등으로 만든 다른 COM Host어플리케이션에서 사용되어야 하는 컨트롤이라면 체크하지 말자.
- Connection points: 컨트롤이 외부에 이벤트를 공개해야 한다면 선택하자. 예제에서는 이벤트 사용 예제를 위해 체크해 두었다.
그 외, Aggregation, Threading model, Interface, Licensed등은 이 예제에서 다루는 수준을 넘어가는 항목들 이므로, 기본값을 그대로 사용하자.
예제에서는 Minimal Control, Connection Points를 체크했다.
Minimal control을 선택했다면 구현 인터페이스 목록(Supported)이 비어있을 것이다. 대충 다음 인터페이스 정도는 구현해 두도록 하자.
- IObjectSafety: 컨트롤이 스크립트, 초기화 등에 안전함을 컨테이너가 인식할 수 있도록 한다.
- IPropertyNotifySink: 컨트롤에서 변경된 속성을 즉시 사용할 수 있도록 해 준다.
- IProvideClassInfo2: 이벤트 사용을 위해서는 반드시 필요하다. Connection Point를 구현하는 경우라면 반드시 포함시키자.
- IQuickActivate: 빠른 활성화를 위한 인터페이스인데.. 그냥 기분상(?) 구현해 두자.
- ISupportErrorInfo: 컨트롤에서 발생한 예외(Exception)을 컨테이너가 처리할 수 있도록 해 준다.
예제에서는 위의 인터페이스들을 구현했다.
기타 언급되지 않은 인터페이스에 관한 정보는 MSDN을 검색해 보시기 바란다.
기타 언급되지 않은 인터페이스에 관한 정보는 MSDN을 검색해 보시기 바란다.
Based on에서는 윈도우 표준 컨트롤에서 상속받고 싶은 경우 부모 컨트롤을 선택할 수 있으니, 필요한 경우 선택한다. 다른 항목들은 대부분의 경우 기본값을 그대로 사용하면 된다.
예제에서도 기본값을 그대로 사용한다.
예제에서도 기본값을 그대로 사용한다.
4.5) Stock Properties: 기본제공 속성 사용
대부분의 컨트롤에서 공통적으로 사용할 수 있을법한 속성들을 지원할 것인지 결정한다. 한번 살펴보고, 지원하고 싶은 속성이 있다면 추가해 준다. 기본속성을 사용하는 쪽이 컨트롤 사용자(개발자) 입장에서는 일관성 있고 보다 직관적일 것이다.
예제는 단순함을 위해 내장 속성을 선택하지 않았다.
모두 설정했으면 Finish를 클릭해 준다.
모두 설정했으면 Finish를 클릭해 준다.
컴파일 및 프로젝트 Re-load
Visual Studio의 버그일 것으로 생각되는 문제인데.. 일단 한번 컴파일 해 준 다음, 프로젝트를 닫았다가 다시 불러와야 클래스가 정상적으로 표시된다.
Build-Build Solution 해 준 다음, File - Close Solution을 클릭하자. 그리고 다시 FIle- Open을 통해 GreenmaruX.sln파일을 불러 들인다.
다음 글에서는 컨트롤에 속성과 동작(Method)을 추가해 보겠다.
댓글 없음:
댓글 쓰기