CoCreateInstance用法

 函數功能描述:用指定的類標識符創建一個Com對象,用指定的類標識符創建一個未初始化的對象。當在本機中只創建一個對象時,可以調用CoCreateInstance;在遠程系統中創建一個對象時,可以調用CoCreateInstanceEx;創建多個同一CLSID的對象時, 可以參考 CoGetClassObject 函數。
  函數原形:
  STDAPI CoCreateInstance(
  REFCLSID rclsid, //創建的Com對象的類標識符(CLSID)
  LPUNKNOWN pUnkOuter, //指向接口IUnknown的指針
  DWORD dwClsContext, //運行可執行代碼的上下文
  REFIID riid, //創建的Com對象的接口標識符
  LPVOID * ppv //用來接收指向Com對象接口地址的指針變量
  );
  參數:
  rclsid
  [in] 用來唯一標識一個對象的CLSID(128位),需要用它來創建指定對象。
  pUnkOuter
  [in] 如果爲NULL, 表明此對象不是聚合式對象一部分。如果不是NULL, 則指針指向一個聚合式對象的IUnknown接口。
  dwClsContext
  [in] 組件類別. 可使用CLSCTX枚舉器中預定義的值.
  riid
  [in] 引用接口標識符,用來與對象通信。
  ppv
  [out] 用來接收指向接口地址的指針變量。如果函數調用成功,*ppv包括請求的接口指針。
  返回值:
  S_OK
  指定的Com對象實例被成功創建。
  REGDB_E_CLASSNOTREG
  指定的類沒有在註冊表中註冊. 也可能是指定的dwClsContext沒有註冊或註冊表中的服務器類型損壞
  CLASS_E_NOAGGREGATION
  這個類不能創建爲聚合型。
  E_NOINTERFACE
  指定的類沒有實現請求的接口, 或者是IUnknown接口沒有暴露請求的接口.
  註釋:
  CoCreateInstance幫助者函數通過使用對象的CLSID,提供了一種便潔的方式與類對象連接,創建未初始化的實例,以及釋放類對象。它封裝了以下的功能:
  CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF);
  hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj);
  pCF->Release();
  當在本機中只創建一個對象時,調用CoCreateInstance是最方便的;如果要在遠程系統中創建一個對象時,可以調用CoCreateInstanceEx;創建多個同一CLSID的對象時, 可以參考 CoGetClassObject 函數;如果創建多個對象實例,可以獲得類對象的IClassFactory 接口指針,並使用需要的方法,可以使用CoGetClassObject函數。
  在CLSCTX枚舉器中, 你可以指定用來管理對象的服務器類型. 這些常量可以是CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER或是它們的任何組合. 常量CLSCTX_ALL被定義爲這三個值的組合. 想獲得更多的有關這些常量的用法,請參考CLSCTX.
  實例:
  if ( SUCCEEDED( CoInitialize(NULL) ) )
  {
  // 如果成功初始化COM庫,則繼續初始化並運行應用程序...
  // 對於Win32應用程序, CoInitialize函數的pvReserved參數,必須爲NULL. 此參數不能被用於32位COM,
  // CoInitialize將會返回E_INVALIDARG,如果傳遞一個非NULL參數.
  }
  else
  {
  // 如果初始化COM庫失敗,則退出.
  }
  HRESULT hr;
  IComObject *pRet;
  hr = CoCreateInstance(CLSID_OFCOM,NULL,CLSCTX_INPROC_SERVER,IID_OFCOMOBJECT,
  (PPVOID)&pRet);
  if (SUCCEEDED(hr))
  {
  // 卸載不用的COM服務.
  CoFreeUnusedLibraries();
  }
  else
  ...
  ...
  pRet->Release();
  CoUninitialize();
  要求:
  Windows NT/2000: 需要 Windows NT 3.1 或以後版本。
  Windows 95/98: 需要 Windows 95 或以後版本。
  頭文件 : objbase.h.
  庫文件 : ole32.dll.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章