DirectX 9.0 ÀÇ ¼Ò°³ DirectX SDK ÀÇ »ç¿ë¹ý C ¶Ç´Â C++ ¿¡ ÀÇÇÑ DirectX ÇÁ·Î±×·¡¹Ö COM ÀÇ »ç¿ë¹ý COM ÀÎÅÍÆäÀ̽ºÀÇ »ç¿ë¹ý [¸ñÂ÷¿¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
|
| Microsoft DirectX 9.0 |
±¸¼º ¿ä¼Ò °³Ã¼ ¸ðµ¨ (COM) °³Ã¼¸¦ »ý¼º Çϸé, »ý¼º ¸Þ¼µå°¡ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ µ¹·ÁÁØ´Ù. ÀÌ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ, ±× ÀÎÅÍÆäÀ̽ºÀÇ ÀÓÀÇÀÇ ¸Þ¼µå¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù. ÀÌ Æ÷ÀÎÅÍÀÇ ±¸¹®Àº, C++ ÀÇ ¸Þ¼µåÀÇ °æ¿ì¿Í °°´Ù. ´ÙÀ½ ÄÚµå´Â, ÀüÀÇ ÁÖÁ¦·Î °¡¸®Å² ¿¹ÀÇ È®ÀåÀÌ´Ù. ÀÌ ¿¹¿¡¼´Â,IDirectPlay8Peer °³Ã¼ÀÇ »ý¼º ÈÄ,CoCreateInstance °¡ µ¹·ÁÁØ IDirectPlay8Peer ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ »ç¿ëÇØ IDirectPlay8Peer::Initialize ¸Þ¼µå¸¦ È£ÃâÇØ, °³Ã¼¸¦ ÃʱâÈÇϰí ÀÖ´Ù. ¾Ë±â ½±°Ô, ¿¡·¯ Á¤Á¤ ÄÚµå´Â »ý·« µÇ¾î ÀÖ´Ù.
IDirectPlay8Peer* g_pDP = NULL;
...
CoInitialize( NULL );
...
hr = CoCreateInstance( CLSID_DirectPlay8Peer, NULL, CLSCTX_INPROC_SERVER,
IID_IDirectPlay8Peer, (LPVOID*) &g_pDP );
hr = g_pDP->Initialize( NULL, DirectPlayMessageHandler, 0 );
º¸ÅëÀº, »ý¼º ¸Þ¼µå·ÎºÎÅÍ ¹Þ´Â ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¸À¸·Î ¿ë¹«´Â ÃæºÐÇÏ´Ù. ½ÇÁ¦, °³Ã¼°¡ °ø°³ÇÏ´Â ÀÎÅÍÆäÀ̽º°¡ IUnknown À̿ܿ¡´Â 1 °³ »ÓÀÎ Àϵµ ¸¹´Ù. ±×·¯³ª, ¸¹Àº °³Ã¼´Â º¹¼öÀÇ ÀÎÅÍÆäÀ̽º¸¦ °ø°³ÇÑ´Ù. ÀÌ ¶§¹®¿¡, º¹¼öÀÇ ÀÎÅÍÆäÀ̽ºÀÇ Æ÷ÀÎÅͰ¡ ÇÊ¿äÇÏ°Ô µÇ´Â °æ¿ìµµ ÀÖ´Ù. »ý¼º ¸Þ¼µå°¡ µ¹·ÁÁÖ´Â ÀÎÅÍÆäÀ̽º ¿Ü¿¡µµ ÀÎÅÍÆäÀ̽º°¡ ÇÊ¿äÇÑ °æ¿ì, »õ·Î¿î °³Ã¼¸¦ »ý¼º ÇÒ ÇÊ¿ä´Â ¾ø´Ù. °³Ã¼ÀÇ IUnknown::QueryInterface ¸Þ¼µå¸¦ »ç¿ëÇØ ´Ù¸¥ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ¿ä±¸ÇÒ ¼ö ÀÖ´Ù.
CoCreateInstance ·Î °³Ã¼¸¦ »ý¼º ÇßÀ» °æ¿ì´Â,IUnknown ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ¿ä±¸ÇÑ ÈÄ,IUnknown::QueryInterface ¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ, ÇÊ¿äÇÑ ¸ðµç ÀÎÅÍÆäÀ̽º¸¦ ¿ä±¸ÇÒ ¼ö ÀÖ´Ù. ´Ù¸¸, ÀÌ ¹æ¹ýÀº, ÇÊ¿äÇÑ ÀÎÅÍÆäÀ̽º°¡ 1 °³¸¸ÀÇ °æ¿ì´Â ºÒÆíÇÏ´Ù. ¶Ç, µ¹·ÁÁÖ´Â ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Â °³Ã¼ »ý¼º ¸Þ¼µå¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â, ÀüÇô µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù. ½ÇÁ¦·Î´Â, ¸ðµç COM ÀÎÅÍÆäÀ̽º´Â IUnknown ÀÎÅÍÆäÀ̽º¸¦ È®ÀåÇϹǷÎ, º¸ÅëÀº, ¸í½ÃÀûÀÎ IUnknown Æ÷ÀÎÅ͸¦ ¾ò¾î¿Â´Ù ÇÊ¿ä´Â ¾ø´Ù.
ÀÎÅÍÆäÀ̽ºÀÇ È®ÀåÀº, C++ ÀÇ Å¬·¡½ºÀÇ °è½Â°ú À¯»çÇÏ´Ù. ¾ÆÀÌ ÀÎÅÍÆäÀ̽º´Â, Ä£ÀÎÅÍÆäÀ̽ºÀÇ ¸ðµç ¸Þ¼µå¿Í ¾ÆÀÌ µ¶ÀÚÀûÀÎ ¸Þ¼µå¸¦ 1 °³ ÀÌ»ó °ø°³ÇÑ´Ù. ½ÇÁ¦, ¡¸È®À塹´ë½Å¿¡ ¡¸°è½Â¡¹À̶ó°í Çϴ ǥÇöÀ» »ç¿ëÇÏ´Â Àϵµ ¸¹´Ù. ´Ù¸¸, °è½ÂÀº °³Ã¼ ³»ºÎ¿¡¼ ÇàÇØÁö´Â °ÍÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ °³Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¸¦ °è½Â ¶Ç´Â È®ÀåÇÒ ¼ö ¾ø´Ù. ±×·¯³ª, ¾ÆÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¸é ¾ÆÀÌ ¶Ç´Â Ä£ÀÎÅÍÆäÀ̽ºÀÇ ÀÓÀÇÀÇ ¸Þ¼µå¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.
¸ðµç ÀÎÅÍÆäÀ̽º´Â IUnknown ÀÇ ¾ÆÀÌÀÌ´Ù. ÀÌ ¶§¹®¿¡, °³Ã¼¿¡ ´ëÇØ¼ ÃëµæÇÑ ¾î´À ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ »ç¿ëÇØµµ,QueryInterface ¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ±× °æ¿ì´Â, ¿ä±¸ÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÇ ÀÎÅÍÆäÀ̽º ½Äº°ÀÚ (IID)¿Í ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍÀÇ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù. ¸Þ¼µå°¡ µ¹¾Æ¿Ã ¶§, ÀÌ Æ÷ÀÎÅÍ¿¡ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅͰ¡ ÀúÀå µÈ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ÄÚµå´Â IDirectSound9::CreateSoundBuffer ¸¦ È£ÃâÇØ,1Â÷ ¹öÆÛ °³Ã¼¸¦ »ý¼º Çϰí ÀÖ´Ù. ÀÌ °³Ã¼´Â, º¹¼öÀÇ ÀÎÅÍÆäÀ̽º¸¦ °ø°³ÇÑ´Ù. CreateSoundBuffer ¸Þ¼µå´Â IDirectSoundBuffer9 ÀÎÅÍÆäÀ̽º¸¦ µ¹·ÁÁØ´Ù. ´ÙÀ½ Äڵ忡¼´Â,IDirectSoundBuffer9 ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇØ QueryInterface ¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ,IDirectSound3DListener9 ÀÎÅÍÆäÀ̽º¸¦ ¿ä±¸Çϰí ÀÖ´Ù.
IDirectSoundBuffer9* pDSBPrimary = NULL;
IDirectSound3DListener9* pDSListener;
...
if(FAILED(hr = g_pDS->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL )))
return hr;
if(FAILED(hr = pDSBPrimary->QueryInterface(IID_IDirectSound3DListener9,
(LPVOID *) &pDSListener)))
return hr;