描述
制作整个枚举器的逻辑副本,保留其枚举中的当前位置。这个方法只能做一个“尽力而为”的拷贝。由于许多CIM对象的动态性质,新枚举器可能不枚举与源枚举器相同的一组对象。
注意当枚举使用WBEM_FLAG_FORWARD_ONLY标志初始化时,不支持克隆.
NextAsync开始的任何待处理的异步传送都不会被克隆。
C++ 语法
HRESULT Clone( [out] IEnumWbemClassObject **ppEnum ); |
PowerBASIC 语法
METHOD Clone ( _ BYREF ppEnum AS IEnumWbemClassObject _ ) AS LONG |
参数
ppEnum
接收到一个新的IEnumWbemClassObject对象的指针。出现错误时,不会返回一个新对象。
返回值
此方法返回一个HRESULT,指示方法调用的状态。
出现错误时,可以调用COM函数GetErrorInfo获取更多错误信息。如果网络问题导致您失去与Windows Management的远程连接,也可能会返回COM特定的错误代码。
下表列出了HRESULT中包含的值。
退货代码 |
描述 |
WBEM_E_FAILED |
发生未指定的错误。 |
WBEM_E_INVALID_PARAMETER |
调用者传递一个无效参数。 |
WBEM_E_OUT_OF_MEMORY |
没有足够的内存来完成操作。 |
WBEM_E_TRANSPORT_FAILURE |
这表示当前进程和Windows Management之间的远程过程调用(RPC)链接失败。 |
WBEM_S_NO_ERROR |
呼叫成功,当前位置已更新。 |
示例代码[C++]
以下代码显示了如何使用克隆方法。
BOOL CloneEnum(IEnumWbemClassObject *pSrc)
{
IEnumWbemClassObject *pCopy = 0;
HRESULT hRes = pSrc->Clone(&pCopy);
if (hRes != WBEM_S_NO_ERROR) // Failed to clone it.
return FALSE;
// Use the copy of the enumerator.
// ...
pCopy->Release();
return TRUE;
}
示例代码[PowerBASIC]
以下代码显示了如何使用克隆方法。
FUNCTION CloneEnum(BYVAL pSrc AS IEnumWbemClassObject) AS LONG
LOCAL hRes AS LONG
LOCAL pCopy AS IEnumWbemClassObject
hRes = pSrc.Clone(pCopy)
IF hRes <> %WBEM_S_NO_ERROR THEN // Failed to clone it.
EXIT FUNCTION
END IF
// Use the copy of the enumerator.
// ...
pCopy = NOTHING
FUNCTION = %TRUE
END FUNCTION
备注
因为在客户端需要相同的身份验证级别可能不会返回到宿的回调,建议您使用半异步通信而不是异步。如果需要异步通信,请参阅调用方法.
有关半同步使用方法的更多信息,请参阅IEnumWbemClassObject和调用方法
要求
客户 |
需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95。 |
服务器 |
需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。 |
头 |
在Wbemcli.inc中声明。 |
DLL |
需要Fastprox.dll。 |