본문 바로가기

Programming/Tips(C++,C#)142

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.
Chapter 2. COM개요 *이 포스팅은 개인 학습을 위해 내용을 정리한 것이 목적입니다. 1. COM의 개요 과거 소프트웨어 개발의 문제점 중 하나가 유지보수. 이를 해결하기 위해 프로그램의 모듈화가 대두됨. 유지보수 문제 외에도 다음과 같은 문제가 있음. i) 단일 소프트웨어에서의 크기 증가시, 개발/유지/보수가 어렵다는 문제가 있음. 그에 따라 DLL이 사용되었다. 그러나 DLL을 공유하는 소프트웨어의 경우 DLL버전이 다를 경우 프로그램 수행에 치명적인 문제가 발생한다. ii) 같은 C++로 구현하여도 다른 회사의 컴파일러에서는 호환되지 않음. (이진 표준의 부재) iii) 소프트웨어의 경우 하드웨어처럼 유연성을 가지고 있지 못함 iv) 윈도우용 소프트웨어는 윈도우에서만 사용가능. 그러나 사용자는 모든 플랫폼에서 실행되는 .. 2014. 10. 27.
728x90