建立COM對象(翻譯)

來源:互聯網
上載者:User

建立COM對象

   有幾種方法可以用來建立COM對象。有兩種最常用的方法用來建立DirectX程式,他們是:
   1、直接方式。通過傳遞對象的CLSID給CoCreateInstance函數。這個函數建立對象的一個執行個體,並且返回你所指定的那個介面的指標。
   2、間接方式。通過呼叫DirectX的一個方法或一個函數來為你建立一個對象。這個方法建立一個對象並且返回在這個對象上的一個介面。當你通過這種方式建立一個對象的時候,通常你不能指定返回那一個介面。

   在建立任何對象之前,COM必須呼叫CoInitialize函數進行初始化。假如你用間接的方法建立一個對象,建立這個對象的方法將會自動執行這個初始化。假如你用CoCreateInstance建立這個對象
,你必須明確的呼叫CoInitialize以便進行初始化。當不再使用對象的時候,COM必須呼叫CoUninitialize進行清除初始化。假如你呼叫了CoInitialize,你就必須成對的呼CoUninitialize
.通常,應用程式需要在它的啟動常式裡面初始化COM對象,而在清除常式裡面卸載COM對象。

  
   用CoCreateInstance新建立一個COM對象的案例,你必須有對象的CLSID。假如CLSID是公開可以使用的,你可以在參考文檔或適當的標頭檔中找到它。假如CLSID不是公開使用的,那麼你就不能用這種直接的方式建立這個對象。

   CoCreateInstance這個函數有5個參數。COM將被用於DirectX,通常,你能像下面那樣設定這些參數:
  
   ●rclsid參數:這個參數設定你想建立的那個對象的CLSID.
   ●pUnkOuter參數:這個參數設定為NULL.當你彙總對象時,這個對象被使用。
   ●dwClsContext參數:這個參數設定為CLSCTX_INPROC_SERVER.這樣設定這個參數表明這個對象在DLL中被實現,它將作為程式進程的一部分被運行。
   ●riid參數:這個參數設定你想要返回的介面的IID。這個函數將建立一個對象,並且在ppv這個參數中返回你所請求的介面的指標。
   ●ppv參數:在這個函數返回的時候,這個參數存放在riid中指定的那個介面的指標的地址。這個變數應該被聲明為指向請求介面的指標。

   例如:下面的程式碼片段建立了一個DirectPlay8的對象的執行個體,並且在g_pDP變數中返回一個指向IDirectPlay8Peer介面的指標。假如出現錯誤,將顯示一個對話方塊,並且程式終止運行。

   IDirctPlay8Peer * g_pDP = NULL ;
   ...
   CoInitialize( NULL ) ;
   ...
   hr = CoCreatInstance( 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 FAISE ;
   }

   用間接的方法建立一個對象非常的簡單。只需將一個介面的指標傳遞給建立這個對象的方法即可。然後這個方法就會建立這個對象並且返回指向這個介面的指標。當你用間接的方法建立一個對象的時候,通常你不能選擇返回哪一個介面,然而,你卻可以指定如何建立這個對象的一些事情。例如:下面的程式碼片段呼叫IDirect3D8::CreateDevice方法論述建立一個裝置對象用來代表顯示適配器。它將返回一個指向對象的IDirect3DDevice8介面的指標。這個函數的前4個參數提供了建立這個對象所需要的各種資訊,第5個參數用來接受介面指標。要得到更詳細的資訊請參考文檔。

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

   return E_FAIL ;

 

 

注: 由於翻譯水平有限,錯誤在所難免。如發現翻譯的不對的地方還請路上的朋友指正,謝謝

可以任意轉載。

譯者: closeall

 

2005.09.04 譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.