DirectX 9.0 ÀÇ ¼Ò°³ DirectX SDK ÀÇ »ç¿ë¹ý C ¶Ç´Â C++ ¿¡ ÀÇÇÑ DirectX ÇÁ·Î±×·¡¹Ö COM ÀÇ »ç¿ë¹ý COM °³Ã¼ÀÇ »ý¼º [¸ñÂ÷¿¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
|
| Microsoft DirectX 9.0 |
±¸¼º ¿ä¼Ò °³Ã¼ ¸ðµ¨ (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;