coCreateInstanceEx 函式 (combaseapi.h)

在特定電腦上建立特定類別的實例。

語法

HRESULT CoCreateInstanceEx(
  [in]      REFCLSID     Clsid,
  [in]      IUnknown     *punkOuter,
  [in]      DWORD        dwClsCtx,
  [in]      COSERVERINFO *pServerInfo,
  [in]      DWORD        dwCount,
  [in, out] MULTI_QI     *pResults
);

參數

[in] Clsid

要建立之物件的 CLSID。

[in] punkOuter

如果此參數不是 NULL,表示實例正在建立為匯總的一部分, 而 punkOuter 則用來作為新實例的 IUnknown 控制。 目前不支援跨進程或跨計算機匯總。 當具現化進程外的物件時,如果 punkOuterNULL,則會傳回CLASS_E_NOAGGREGATION。

[in] dwClsCtx

CLSCTX 列舉中的值。

[in] pServerInfo

要具現化物件之計算機的相關信息。 請參閱 COSERVERINFO。 此參數可以是 NULL,在此情況下,對象會根據 dwClsCtx 參數的解譯,在本機計算機上或登錄中指定的電腦具現化於類別的 RemoteServerName 值下。

[in] dwCount

pResults 中的結構數目。 此值必須大於 0。

[in, out] pResults

MULTI_QI 結構的陣列。 每個結構都有三個成員:要求介面的標識子 (pIID) 、傳回介面指標的位置 (pItf) ,以及 呼叫 QueryInterface (hr) 的傳回值。

傳回值

此函式可以傳回標準傳回值E_INVALIDARG,以及下列值。

傳回碼 描述
S_OK
表示成功。
REGDB_E_CLASSNOTREG
指定的類別未在註冊資料庫中註冊。 也可以指出您在 CLSCTX 列舉中所要求的伺服器類型未註冊,或登錄中伺服器類型的值已損毀。
CLASS_E_NOAGGREGATION
此類別無法建立為匯總的一部分。
CO_S_NOTALLINTERFACES
已成功擷取 pResults 陣列中要求的所有介面,但至少有一個介面。 pResults 中每個MULTI_QI結構的 hr 成員會指出是否傳回特定介面S_OK或E_NOINTERFACE。
E_NOINTERFACE
已成功擷取 pResults 陣列中所要求的介面。

備註

CoCreateInstanceEx 會在指定的遠端電腦上建立與指定 CLSID 相關聯的單一未初始化物件。 這是 CoCreateInstance 函式的延伸模組,只會在本機電腦上建立物件。 此外, CoCreateInstanceEx 不會要求單一介面並取得該介面的單一指標,而是能夠指定結構的數位,每個都會指向輸入上的介面標識碼 (IID) ,並在傳回時包含 (,如果有的話,) 要求的介面指標,以及 該介面之 QueryInterface 呼叫的傳回值。 這允許電腦之間的來回行程較少。

此函式會封裝三個呼叫:首先,對 CoGetClassObject 連接到與指定 CLSID 相關聯的類別物件,並指定類別的位置;第二,至 IClassFactory::CreateInstance 以建立未初始化的實例,最後至 IClassFactory::Release,以釋放類別物件。

建立的物件仍必須透過呼叫其中一個初始化介面來初始化 (,例如 IPersistStorage::Load) 。 CoGetInstanceFromFileCoGetInstanceFromIStorage 兩個函式會封裝從明顯的來源建立和初始化實例。

當做 pServerInfo 參數傳遞的 COSERVERINFO 結構包含 COM 在建立指定物件的新實例時將使用的安全性設定。 請注意,此參數不會影響在具現化物件上呼叫方法時所使用的安全性設定。 這些安全性設定可透過 CoSetProxyBlanket 函式,以個別介面為基礎進行設定。 另請參閱 IClientSecurity::SetBlanket

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 combaseapi.h (包含 Objbase.h)
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

CoGetInstanceFromFile

CoGetInstanceFromIStorage