勇芳软件工作室.汉化:  Windows Management Instrumentation > COM API for WMI > Interfaces > IEnumWbemClassObject >

Clone Method

Previous pageReturn to chapter overviewNext page

描述

 

制作整个枚举器的逻辑副本,保留其枚举中的当前位置。这个方法只能做一个“尽力而为”的拷贝。由于许多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。