본문 바로가기

Programming267

Chapter 17. ATL COM기초 *이 내용은 개인 학습 내용을 정리한 것입니다. 1. 템플릿과 스마트 포인터 - 템플릿 : 여러 데이터 형에 대해 사용할 수 있는 하나의 함수 또는 클래스. 1) 함수 템플릿 - 실제 함수 생성이 아니라 함수를 정의하는 방법에 대해 기술. 실제로 해당 함수가 호출될 때, 함수가 포 함된다. 2) 클래스 템플릿 - 템플릿은 다양한 데이터 타입에 대해 동작하는 소스를 구현하는데 유용하다. 3) 스마트 포인터 예) class CStudy{ public: CStudy(char *szStudy){ strcpy(m_szStury, szStudy); } ~CStudy(){ } virtual void Subject(){ ... } char m_szStudy[256]; }; class CStudyPointer : pub.. 2014. 10. 28.
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.
728x90