본문 바로가기

COM6

자동화와 이중 인터페이스 1. 자동화 - VB나 ASP같은 스크립트기반 언어에서는 COM객체의 인터페이스에 직접 접근할 수 없다. 하지만 자동화를 통해 COM객체를 사용할 수 있다. 자동화를 통하면 마샬링을 위한 프록시/스텁 구현도 필요가 없다. 하지만, 자동화의 단점은 수행속도, 사용가능한 데이터형의 제한이 있다. 이를 위해 MS에서는 자동화와 기존의 커스텀 인터페이스를 모두 지원하는 이중 인터페이스를 제안함. 2. IDispatch인터페이스 - IUnknown에서 파생됨. GetTypeInfoCount, GetTypeInfo, GetIDsOfNames, Invoke등의 4개의 메소드가 있다. - 다음 VB의 예 dim obj As Object set obj = CreateObject(ProgID) obj.Prop = prop.. 2014. 11. 12.
Chapter 08. ATL윈도우 클래스와 WTL 8.1 ATL윈도우 클래스 참조링크 : http://devnote.tistory.com/63 8.1.1 ATL윈도우클래스 개요 - ATL에서는 윈도우 조작을 위해 윈도우 클래스를 제공한다. (최상위는 CWindow 클래스) 8.1.2 윈도우 애플리케이션 - 윈도우 프로그램을 구성하면 WinMain과 윈도우 프로시저로 구성됨. -> 프로그램의 진입은 WinMain(). 메인 윈도우를 생성하면 메시지 루프에 들어오는 메시지는 윈도우 프로시저로 전달된다. 8.1.3 CWindowImpl클래스. - CWindow에서 파생되어, 윈도우의 생성 및 클래스등록, 메시지 처리등의 기능을 제공. (CWindow만 사용하면 클래스등록과 메시지처리는 직접 구현해야 함) - CWindowImple< class T, class.. 2014. 11. 11.
Chapter 07. ATL개요 7.1 ATL의 특징 - COM컴포넌트를 빠르게 구현할 수 있도록, IUnknown, IClassFactory등의 인터페이스에 대한 코드가 구현되어 있음 7.1.1 ATL의 장점 - 작고 빠르고 확장성을 갖는 COM컴포넌트를 만들어 줌. - 템플릿은 코드에서 사용하여 타입이 명확할 때, 컴파일러가 코드를 만들어 준다. 즉, 사용안되는 경우 해당 템플릿은 코드에 포함되지 않는다. 그리고 ATL에서는 IUnknown등의 구현이 지원되어 편리하다. 7.1.2 ~ 7.1.3 ATL프로젝트 만들기, ATL COM객체 추가 - Visual Studio에서 ATL프로젝트를 만들면 '$(프로젝트명)PS'의 프로젝트가 하나 추가되어있다. 이는, 프록시/스텁을 VS에서 만들어주었다. 또한 DllRegister/Unregi.. 2014. 11. 10.
Chapter 06. Visual C++ 컴파일러 6.1 COM지원 VC++컴파일러 개요. - VC++컴파일러는 COM컴포넌트의 형식라이브러리를 읽어 이를 컴파일 가능한 C++코드로 변환해준다. VC++에서 COM을 지원하기 위한 예약어는 다음과 같다. + #import, __Declspec, __uuidof, _com_ptr_t, _com_error, _bstr_t, _variant_t, 전역함수 - 이제까지 해왔던 COM객체의 CLSID를 얻어오는 과정을, #import "progID"로 해결 가능하다. - IHelloPtr pIHello( __uuidof(Hello)); 위 구문은 다음과 같다. IUnknown* pUnk = NULL; IHello* pIHello = NULL; hr = ::CoCreateInstance(clsid, NULL, CL.. 2014. 11. 10.
Chapter 05. Out-of-Process server COM component 5.1 마샬링의 이해 5.1.1 아웃-오브-프로세스 서버 COM컴포넌트 구현시 고려사항 - 인 프로세스 서버에서는 COM컴포넌트가 가리키는 주소 값은 클라이언트와 같은 영역 안에 존재한다. (인-프로세스 서버버 컴포넌트는 클라이언트에서 해당 DLL을 불러온다.) 그러나 아웃-오브-프로세스 서버는 다른 프로세스 메모리 영역에 위치한다. 즉, COM컴포넌트에서 리턴해 준 인터페이스 주소를 클라이언트에서는 사용할 수 없다. 5.1.2 표준 마샬링 과정 - COM은 IPC(Inter-Process Communication. 프로세스간 통신)을 위해 LPC(Local Procedure Call)과 RPC(Remote Procedure Call) 두가지를 사용한다. LPC는 같은 시스템 상에서 실행되는 아웃-오브-.. 2014. 11. 10.
Chapter 04. 인-프로세스 서버 COM 컴포넌트 인-프로세스서버 COM컴포넌트 - 같은 클라이언트 프로그램 안에서 COM컴포넌트가 생성되고 실행되는 것. 4.1 Win32 DLL의 이해 - 클라이언트 안에서 인-프로세스 서버 COM 컴포넌트가 실행되기 위해서는 Win32DLL이어야함 4.1.1 프로세스와 DLL - 윈도우 운영체제의 프로세스는 4GB의 고유의 주소영역을 가짐. OS의 메모리관리자는 페이징을 이용 해 프로세스가 소유한 물리적인 메모리에 대해 4GB크기의 연속적인 리니어 주소 어딘가에 매핑되게 하 여 다른 프로세스의 메모리를 알 수 없게 한다. > 하나의 프로세스에 문제가 생겨도 다른 프로세스는 영향받지 않음. > DLL의 물리적 메모리 영역은 DLL을 로드한 어플리케이션의 프로세스 주소에 매핑된다. 4.1.2 DLLMain함수 - DLL.. 2014. 10. 29.
728x90