본문 바로가기

전체 글294

Chapter 8. 포함과 통합 *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. 1. 포함의 원리 - 포함은 통합과 달리 외부 컴포넌트가 내부 컴포넌트를 생성부터 소멸까지 관리한다. 클라이언트에서는 외부 컴포넌트를 통해 내부 컴포넌트에 접근(내부로 직접 접근이 안됨) - 포함의 사용목적은 컴포넌트가 만들어진 경우 재활용을 통해 개발주기를 단축할 수 있어서임. 포함은 현 재 있는 컴포넌트를 한겹 감싸서 이용하고자 할 때 사용한다. - 포함과 통합의 선택 포함: 내부 컴포넌트의 기능의 강화 및 수정이 필요할 때 유리 통합: 내부 컴포넌트를 바로사용할 수 있을 때 유리 - 포함의 과정 1) 외부컴포넌트의 DllGetClassObject() 호출 - 외부 컴포넌트의 클래스팩토리 생성 2) 외부 컴포넌트의 클래스팩토리에서 파생 .. 2014. 10. 28.
Chapter 7. 클래스 팩토리 *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. 클라이언트에서 객체를 직접 생성하고, delete를 해야한다 -> DLL개체에 대해 의존적이다. ->클래스 팩토리를 이용하여 해결한다. 1. 레지스트리 - 클라이언트에서 직접적으로 라이브러리 로딩 -> 이름충돌의 문제 1) 윈도우 레지스트리 - 컴포넌트가 윈도우 레지스트리에 CLSID를 인덱스로 하여 DLL파일 이름을 기록해 두었음. - COM관련 레지스트리 -> HKEY_CLASSES_ROOT\\CLSID 내에 있음. - 레지스트리에서 사용하는 다른 서버키 서버 키 이름 전체 이름 의 미 ProgID Program Identifier 컴포넌트 구분자 AppID Application ID 원격 서버를 가르키는 APPID CATID Compo.. 2014. 10. 27.
Chapter 6. Dynamic Linking Library *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. 1. DLL의 기초 - DLL로딩하는 과정 DLL을 regsvr32를 이용하여 등록 후, 클라이언트에서 이 레지스트리에 등록된 DLL을 메모리로 로딩함. 1) DLL의 특징 DLL은 로딩하는 프로세스의 같은 주소 공간을 사용한다. 다른 프로세스 간에는 다른 물리적 메모리 주소를 사용하고 있으므로, 다른 프로세스간 접근은 프로세스간 통신을 이용하여야 한다. *DLL을이 무엇이고 이를 이용하여 가능한 작업 - 디스크상의 파일로서 글로벌데이터, 컴파일된 함수, 프로세스의 일부분이 되는 리소스로 구성 - 컴파일 되면 기본 주소에 DLL이 로드되고, 다른 DLL과 충돌하지 않으면 프로세스에서 동일한 가상주 소에 매핑됨 - export된 다양한 함수들.. 2014. 10. 27.
Chapter 5. 참조카운터, HRESULT, GUID *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. COM은 클라이언트와 컴포넌트의 완벽한 분리를 위해, 클라이언트에서 컴포넌트의 의존성을 완전히 배제시킨다. COM에서 중요한 것은 AddRef(), Release(), QueryInterface()이다. AddRef()는 컴포넌트 생성 시, 카운트를 하나씩 증가, Release()는 컴포넌트의 작업이 완전히 끝나면 하나 감소시킨다. 컴포넌트의 삭제를 직접 하는 것이 아니라, 컴포넌트에게 정보를 주어, COM이 스스로 생명주기를 결정하게 한다. 또한 QueryInterface()를 통하여 유일성을 보장받는다. 1. 참조카운터의 모든 것 COM컴포넌트의 생명주기를 클라이언트에서 관리하지 않고, COM객체에 맡김. 컴포넌트 생성시 AddRef().. 2014. 10. 27.
Chapter 4. Query Interface *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. 1. 인터페이스에 대한 질의 클라이언트가 COM에 접근하려면 인터페이스 이름을 알아야 한다. 그러나 이름을 직접적으로 사용하는 방법은 인터페이스 이름의 중복이 나타날 확률이 높다. -> 중복 인터페이스 이름이 생기지 않도록 하거나, 인터페이스 이름 대신 중복되지 않는 무언가 (인터페이스 ID)를 사용해야 한다. - 모든 COM은 IUnknown이라는 인터페이스를 노출해, IUnknown의 QueryInterface에 InterfaceID를 인자 로 넘겨주면, 해당 인터페이스를 반환하도록 한다. - IUnknown의 원형 interface IUnknown { virtual HRESULT __stdcall QueryInterface(const .. 2014. 10. 27.
Chapter 3. 인터페이스 *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. *인터페이스 : COM에 있어서 클라이언트들이 COM자신에게 접근 가능한 통신채널을 제공하는 것 1. 개략적인 인터페이스 - DLL에 대한 인터페이스 : DLL에 의해 노출되는 함수들의 집합 - 클래스에 대한 인터페이스 : 클래스 멤버들의 집합 - COM인터페이스 : 변화에 의한 손상으로부터 시스템을 보호할 수 있고, 다른 컴포넌트에 대해 클라이언 트가 동일한 방법으로 접근할 수 있도록 함. COM인터페이스는 함수에 대한 포인터들의 배열을 포함하는 특정한 메모리 구조. - C++에서 COM 인터페이스 구현 이진 표준을 따르기 위해 추상 기본 클래스를 이용하여 인터페이스를 만들고, 하나의 컴포넌트는 여러개 의 인터페이스를 제공할 수 있으므로,.. 2014. 10. 27.
728x90