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 控制。 目前不支援跨進程或跨計算機匯總。 當具現化進程外的物件時,如果 punkOuter 非 NULL,則會傳回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,以及下列值。
傳回碼 | 描述 |
---|---|
|
表示成功。 |
|
指定的類別未在註冊資料庫中註冊。 也可以指出您在 CLSCTX 列舉中所要求的伺服器類型未註冊,或登錄中伺服器類型的值已損毀。 |
|
此類別無法建立為匯總的一部分。 |
|
已成功擷取 pResults 陣列中要求的所有介面,但至少有一個介面。 pResults 中每個MULTI_QI結構的 hr 成員會指出是否傳回特定介面S_OK或E_NOINTERFACE。 |
|
已成功擷取 pResults 陣列中所要求的介面。 |
備註
CoCreateInstanceEx 會在指定的遠端電腦上建立與指定 CLSID 相關聯的單一未初始化物件。 這是 CoCreateInstance 函式的延伸模組,只會在本機電腦上建立物件。 此外, CoCreateInstanceEx 不會要求單一介面並取得該介面的單一指標,而是能夠指定結構的數位,每個都會指向輸入上的介面標識碼 (IID) ,並在傳回時包含 (,如果有的話,) 要求的介面指標,以及 該介面之 QueryInterface 呼叫的傳回值。 這允許電腦之間的來回行程較少。
此函式會封裝三個呼叫:首先,對 CoGetClassObject 連接到與指定 CLSID 相關聯的類別物件,並指定類別的位置;第二,至 IClassFactory::CreateInstance 以建立未初始化的實例,最後至 IClassFactory::Release,以釋放類別物件。
建立的物件仍必須透過呼叫其中一個初始化介面來初始化 (,例如 IPersistStorage::Load) 。 CoGetInstanceFromFile 和 CoGetInstanceFromIStorage 兩個函式會封裝從明顯的來源建立和初始化實例。
當做 pServerInfo 參數傳遞的 COSERVERINFO 結構包含 COM 在建立指定物件的新實例時將使用的安全性設定。 請注意,此參數不會影響在具現化物件上呼叫方法時所使用的安全性設定。 這些安全性設定可透過 CoSetProxyBlanket 函式,以個別介面為基礎進行設定。 另請參閱 IClientSecurity::SetBlanket。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | combaseapi.h (包含 Objbase.h) |
程式庫 | Ole32.lib |
Dll | Ole32.dll |