티스토리 뷰
(Component Object Model, COM)
마이크로소프트가 개발한 소프트웨어 구성 요소들의 응용프로그램 이진 인터페이스이다.
마이크로 소프트가 1993 년에 소개하였다. COM을 이용해 개발된 프로그램들은 프로세스간 통신과 동적 오브젝트 생성이 가능하다. 소프트웨어 개발사에서는 COM이라는 용어를 종종 OLE, OLE 자동화 ActiveX, COM, COM+, DCOM 기술을 포함하는 포괄적 개념으로 사용한다. COM이 소개된 건 1993 년이지만, 마이크로소프트는 1997년이 되어서야 COM이라는 이름을 강조하기 시작했다.
다양한 플랫폼에서 COM 이 구현되었지만, 주로 마이크로소프트 윈도에서 사용된다 COM은 닷넷 프레임워크와 같은 다른 기술로 대체되리라 전망된다.
... ㅁ;ㅔ얼;미ㅏㅇㄹ말이어려워 한국말인가
DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술로서 어떤 작업을 수행하기 위하여 사용할 수 있는 블랙박스와 같은 객체
DLL의 형태로 제공
객체 내부는 노출하지 않고 응용 프로그램이 호출할 수 있는 메서드(Method) 함수만 노출한다.
프로그램에서 COM 객체를 사용하는 유일한 방법은 노출된 메서드를 이용하는 것이다.
모든 Direct3D 객체는 COM 객체이다.
COM 의 객체는 인터페이스(Interface ) 를 이용하여 참조한다.( 실제: 인터페이스 포인터)
c++의 포인터처럼 사용할 수 있다.
IUnknown인터페이스
모든 COM 인터페이스는 IUnKnown 인터페이스를 상속받음
- IUnKnown::AddRef() : 인터페이스의 참조카운트(Reference Count)를 1 증가시킴
COM 객체에 대한 인터페이스 포인터를 다른 변수로 복사할 때에는 반드시 이 메서드 호출해야함
-IUnKnown::Release() : 인터페이스의 참조카운트 1감소시킨다.
참조 카운트가 0이 되면 그 객체는 자동소멸
-IUnKnown::QueryInterface() : 객체가 특정 인터페이스를 지원하는지 질의한다.
특정 인터페이스의 REFFID를 넘기면 _out 형태로 인터페이스 포인터를 리턴
COM객체의 생성과 소멸
-개발자 입장에서 기억해야 할 3가지
1. Direct3D COM 객체를 생성하기 위한 별도의 함수가 존재.
2. COM 객체에 대한 인터페이스의 포인터를 다른 변수로 복사할 시 반드시 AddRef() 호출
3. COM 객체에 대한 인터페이스의 포인터가 더는 필요없거나 소멸시키고 싶으면 Release() 함수 호출
STL의 스마트 포인터 (shard_ptr)의 개념과 비슷한데 COM 객체들은 참조 카운트(Ref)가 0이면 자동적으로 소멸된다.
위의 D3D11CreateDevice 같은 COM인터페이스 생성에 관련된 코드는 COM인터페이스의 포인터변수를 선언하고
포인터변수의 주소를 인자로 넘기는 방법을 통해 이루어진다.
ex)
HRESULT CreateDXGIFactory( _in_ REFID riid, _out_ void **ppFactory);
cf) COM 인터페이스는 접두어로 대문자 I를 가진다. 예를들어 표면을나타내는 COM인터페이스는 IDirect3DSurface
'ComComComCom > DX .. D3D' 카테고리의 다른 글
[fucntion] Direct3DCreate9 (0) | 2017.06.12 |
---|---|
크라메르 법을 이용한 역행렬, 가우시안법을 이용한 역행렬 퍼포먼스 비교한 글 캡쳐 (0) | 2017.06.11 |
Direct3D (0) | 2017.06.09 |
[function] D3DXMatrixPerspectiveFovLH (0) | 2017.06.06 |
[function] D3DXMatrixLookAtLH (0) | 2017.06.06 |