DirectX 9.0 의 소개 DirectX SDK 의 사용법 C 또는 C++ 에 의한 DirectX 프로그래밍 COM 의 사용법 COM 개체의 생성   [목차열람] [주소복사] [슬롯비우기]
COM 개체의 생성
 
Microsoft DirectX 9.0

COM 개체의 생성


구성 요소 개체 모델 (COM) 개체를 생성 하는 방법은 몇개인가 있다. Microsoft® DirectX® 프로그래밍에서는, 다음의 2 개의 방법이 가장 일반적으로 사용되고 있다.

개체를 생성 할 때는,CoInitialize 함수를 호출해 미리 COM 를 초기화해 둘 필요가 있다. 간접적으로 개체를 생성 하는 경우는, 개체 생성 메서드에 의해 이 처리를 한다. CoCreateInstance 를 사용해 개체를 생성 할 필요가 있는 경우는, 명시적으로 CoInitialize 를 호출해야 한다. 조작을 완료하면CoUninitialize 를 호출해 COM 를 초기화할 필요가 있다. CoInitialize 를 호출하면 대응하는 CoUninitialize 를 호출해야 한다. COM 를 명시적으로 초기화할 필요가 있는 애플리케이션에서는, 스타트 업 루틴으로 COM 를 초기화해, 클린업 루틴으로 초기화되지 않은 상태에 되돌리는 것이 일반적이다.

CoCreateInstance 로 COM 개체의 새로운 인스턴스를 생성 하려면 , 개체의 CLSID 가 필요하다. 공개되고 있는 CLSID 는, 레퍼런스 문서 또는 해당하는 헤더 파일에 기술되고 있다. CLSID 가 공개되지 않은 경우는, 그 개체를 직접 생성 할 수 없다.

CoCreateInstance 함수에는 5 개의 파라미터가 있다. DirectX 로 사용하는 COM 개체를 생성 하는 경우는, 보통, 다음의 파라미터를 설정한다.

예를 들어, 다음 코드는, Microsoft DirectPlay® 피어 개체의 새로운 인스턴스를 생성 해, 개체의 IDirectPlay8Peer 인터페이스의 포인터를 변수 g_pDP 에 돌려주고 있다. 에러가 발생 하면, 메시지 박스가 표시되어 애플리케이션이 종료한다.

IDirectPlay8Peer*  g_pDP = NULL;
...
CoInitialize( NULL );
...
hr = CoCreateInstance( CLSID_DirectPlay8, NULL, CLSCTX_INPROC_SERVER,
                         IID_IDirectPlay8Peer, (LPVOID*) &g_pDP );

if( FAILED( hr ) ) 
  {
    MessageBox( NULL, TEXT("Failed Creating IDirectPlay8Peer.  "),
                  TEXT("DirectPlay Sample"), MB_OK | MB_ICONERROR );
    return FALSE;
  }
...

보통은, 개체를 간접적으로 생성 하는 쪽이 현격히 간단하다. 개체 생성 메서드에 인터페이스 포인터의 주소를 건네주는 것만으로 좋다. 후는, 메서드에 의해 개체가 생성 되어, 인터페이스 포인터가 돌아간다. 보통, 간접적인 방법으로 개체를 생성 하는 경우는, 메서드가 돌려주는 인터페이스를 선택할 수 없다. 다만, 개체의 생성 방법에 대해, 다양한 사항을 지정할 수 있다. 예를 들어, 다음 코드는, 위에의 IDirect3D9::CreateDevice 메서드를 호출해, 디스플레이 어댑터를 나타내는 장치 개체를 생성 하고 있다. 이 메서드는, 개체의 IDirect3DDevice9 인터페이스의 포인터를 돌려준다. 최초의 4 개의 파라미터는, 개체를 생성 하기 위해서 필요한 각종의 정보를 지정해, 5 번째의 파라미터는 인터페이스 포인터를 받는다. 더 자세한 정보는, 레퍼런스 문서를 참조할것.

IDirect3DDevice9 *g_pd3dDevice = NULL;
...
if( FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                 3DDEVTYPE_HAL,
                                 hWnd,
                                 D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                 &d3dpp,
                                 &g_pd3dDevice )))

return E_FAIL;


© 2002 Microsoft Corporation. All rights reserved.
↑TOP