블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

05-05 00:45

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 5. 11. 11:14 Programming/COM

이글은 '선문비트 고급과정'에서 강의받은 내용을 토대로 작성하였으며, 비트 교육센터 자료를 참고하여 올린내용입니다. 

문제가 될시 삭제가 될 수 있습니다.


작성날짜    : 2011-03-16


Class Factory

* Client에서 IUnknown 포인터를 얻어야만 QueryInterface를 통하여 다른 interface pointer를 얻을 수 있었다.

* Class Factory를 이용함으로써 IUnknown interface pointer를 얻어오는 절차 또한 생략 가능하다.( Client입장에서의 생략)

이것을 가능하도록 하기 위해 중간 단계의 Class Factory라는 COM 객체를 두어 실제 객체의 생성과 IUnknown 포인터 획득에 대한 처리를 하도록 한다.

(COM 객체라는 건 IUnknown을 상속받아야 한다는 것을 알 수 있음.)

(실제 Class Factory가 수행을 하고 우리는 Class Factory를 제어하면 됨)

* Class Factory는 다른 컴포넌트를 만들기 위해 존재하는 컴포넌트이다.

* Class Factory의 표준 인터페이스는 IClassFactory 이다.

프로그래머는 IClassFactory을 구현해줘야한다.)

 

IClassFactory interface

별도로 두개의 Virtual 함수를 갖는다.

virtual HRESULT __stdcall CreateInstance(IUnknown*   pUnknownOuter,  REFIID iid,LPVOID* ppv);

CreateInstance 함수에서 객체를 생성한다.

virtual HRESULT __stdcall LockServer(BOOL bLock);

(LockServer에 역할은 동기화)

실행형 컴포넌트에서 한 클라이언트가 팩토리 포인터를 갖는 시점에서 다른 클라이언트가 객체를 인스턴스화 하고 바로 종료 했을경우 처음의 클라이언트는 잘못된 IClassFactory포인터를 갖게된다. 이를 방지 하기 위해 별도의 Lock 카운트를 계산한다.

 

CriticalSection을 이용한 임계영역을 사용하여 동기화

동기화 Kernel Object를 이용한 동기화(Mutex, Semaphores, Event)

'Programming > COM' 카테고리의 다른 글

[COM] IUnknown  (0) 2015.05.11
[COM] COM 이란?  (0) 2015.05.11
[COM] Registry  (0) 2015.05.11
[COM] Create GUID  (0) 2015.05.11
[COM] Component란?  (0) 2015.05.11
posted by Kanais