ActiveX 21

고급 액티브X 컨트롤에 도전하자

지난 연재에서는 컨트롤의 내부를 살펴봤다. 이번호에서는 보다 좋은 컨트롤을 만들기 위한 외부적인 기능들을 몇 가지 소개하고 3회에 걸친 연재를마치려고 한다. 컨트롤이 IE 안에서 다양한 기능을 수행하기 위해 기본적으로 제공해야 할 기능이 있다. 이번호에서는 메모리 DC를 사용한 부드러운 화면 처리, 툴팁의 제공, 쓰레드의 활용 등 대표적인 기능들을 하나씩 살펴보겠다. 웹을 기반으로 하는 프로젝트에서 중요 기능을 액티브X 컨트롤로 개발하기 위해서는 몇 가지 선행 지식이 있어야 한다. 우리는 지난 1회 연재를 통해 전체 개발 프로세스를 알아왔다. 컨트롤을 어떻게 만들고 어떻게 분배하는지를 볼 수 있었을 것이다. 2회 연재에서는 좀더 이론적인 부분으로 들어가 IE의 내부적인 구조와 이 구조에 따른 컨트롤의 특..

ActiveX 2008.09.14

COM, ATL에서의 reinterpret_cast 의 쓰임새

그동안 C++에서 reinterpret_cast를 배우긴 배웠는 데 실제로 써먹는 경우가 없었다. 그런데 컴포넌트 작성하면서 쓰게 될 줄이야~~~ 커넥션 포인터 관련 얻는 부분의 코드 조각이다. m_rgpCP[0] = new CConnectionPoint(reinterpret_cast(this), DIID__DIDragonEvents); 사전적 의미는 "재해석해서 캐스트"한다.... 즉 강제 형변환 캐스팅이다. 컴파일러는 약간 지능적이다. 클래스 형변환시 부모 - 자식 관계의 형태에서 포인터 관련코드 디버그해보면서 놀랐던 기억이 난다. 그 전까지 형변환으로 사용했던 것은 모두 reinterpret_cast(강제 형변환) 의미를 가진 것이었다. 이를테면 핸들값을 스파이로 알 경우.... HWND hWnd ..

COM, ATL 2008.09.11

BSTR 자료형 고찰과 사용시 주의점

BSTR은 자동화 타입에서 사용되는 문자열 자료형로서 메모리상에 처음 4바이트는 문자열의 길이값이 입력되고 그 후 유니코드의 문자열이 위치한다. 자동화(Automaton)에 사용되는 자료형의 하나이며 인터페이스에 dual 이나 automation(커스텀 인터페이스일지라도 이 속성을 주면 타입라이브러리 마샬링을 수행한다.) 속성이 존재하거나 dispinterface 등 IDispatch 관련 인터페이스인 경우 오토메이션 마샬러인 타입라이브러리 마샬링을 행할 것이다. 참고로 idl파일에서 [string] 속성을 주지 못한다. 이 속성을 주면 컴파일시 에러메시지가 검출된다. 메모리 할당과 해제는 CoTaskMemAlloc, CoTaskMemFree를 사용하지 않고 SysAllocString과 SysFreeSt..

COM, ATL 2008.08.29

논리상 생성자에서 처리해도 되는 것을 Init 함수를 따로 빼서 사용하는 이유

생성자는 리턴값을 따로 두지 않는다. 에러를 조사하고자 하는 경우는 리턴값으로 확인할 수 없다. 그래서 초기화 함수를 따로 빼서 코딩해야하는 경우가 있다. 컴포넌트 관련 코딩에서 많이 발견된다. 물론 객체 생성후 항상 Init함수를 호출해준다. 다음은 그 예이다. // 생성자 COEnumConnections::COEnumConnections( IUnknown* pHostObj) { // Zero the COM object's reference count. m_cRefs = 0; // Assign the Host Object pointer. m_pHostObj = pHostObj; // Initialize the Connection Point enumerator variables. m_iEnumIndex ..

C, C++ 문법 2008.08.27

ActiveX로 웹페이지의 URL가져오기

-응용 예) ActiveX 콘트롤로 특정 도메인 접속이나 특정 파일 경로의 접근을 막을수 있다 ActiveX초기화 상태에서 인터넷 익스플로어는 IOleObject::SetClientSite()로 포인터를 사이트에 넘기는데 이때 URL을 가져올수 있다 1. Obtain the client site (IOleClientSite) interface pointer. The container calls IOleObject::SetClientSite() to pass a pointer to the client site. Override this method to cache this pointer. 2. Obtain a moniker to the client site by calling IOleClientSite::..

웹, HTML 2008.08.14

표준 프락시 스텁 dll 작성법 및 기본개념들

COM(3) - AtlCom.doc 조회(44) C/C++, MFC | 2008/06/09 (월) 05:20 추천하기(0) | 스크랩하기(0) 1. COM개요 1.1. COM 의 이점 1.1.1. 왜 COM 이 필요한가? 컴포넌트 개체 모델(Component Object Model, COM)은 자신의 고유한 기능을 제공하는 단위 어플리케이션 즉, 컴포넌트의 통합 및 커뮤니케이션 방법에 대한 표준을 정의한 사양이다. 1.1.2. 컴포넌트 소프트웨어의 조건 1. COM 컴포넌트는 언어 독립적이어야 한다. 2. COM 컴포넌트는 이진(binary) 형태로 제공되어야 한다. 3. COM 컴포넌트는 버전 호환성을 제공해야 한다. 4. COM 컴포넌트는 위치 투명성(location transparency)을 제공해..

COM, ATL 2008.08.14

Process/Thread/Apartment

윈도우는 멀티스레드 운영체제이다. 잘 짜여진 멀티스레드 프로그램은 기존의 프로그래밍 방법만으로는 쉽게 구현하기 힘든 편의성을 제공한다. 또한 여러 개의 프로세서를 사용한 멀티프로세스 시스템의 장점을 최대한 살릴려면 멀티스레드 프로그램을 이용해야만 하는 경우도 많다. 이러한 장점에 반해 멀티스레드 프로그램은 분명히 매우 복잡하다. 단순히 몇몇 API만으로 스레드를 생성하고 사용할 수 있지만 단순히 그래서는 멀티스레드 프로그램의 장점을 전혀 살릴 수 없다. 오히려 시스템 전체적인 성능을 낮추는 요인이 될 수 도 있다. 분명 이 글은 멀티스레딩에 관한 책은 아니지만 이러한 점에 대해 조금은 언급을 하도록 하자. 윈도우는 멀티스레드 운영체제이다. 하나의 스레드는 하나의 실행 단위이다. 하지만 멀티프로세스 시스템..

COM, ATL 2008.08.02