IADsCollection::get__NewEnum 方法 (iads.h)
IADsCollection::get__NewEnum 方法获取一个依赖枚举器对象,该枚举器对象为此 ADSI 集合对象实现 IEnumVARIANT。 请注意,函数名称中有两个下划线字符 (get__NewEnum) 。
语法
HRESULT get__NewEnum(
[out] IUnknown **ppEnumerator
);
参数
[out] ppEnumerator
指向此集合的枚举器对象上的 IUnknown 接口的指针的指针。
返回值
此方法支持标准返回值,包括 S_OK、 E_FAIL或 E_NOTIMPL。 有关详细信息和其他返回值,请参阅 ADSI 错误代码。
注解
当服务器支持分页搜索,并且客户端指定的页限制大于服务器上允许的最大搜索结果时, IADsCollection::get__NewEnum 方法将按以下方式返回错误:
- 如果服务器返回没有结果的错误,则函数仅返回错误。
- 如果服务器返回部分结果且不带错误(例如,服务器上允许的最大搜索结果),则函数会将部分结果从服务器返回给用户。
- 如果服务器返回所有结果,无论是否有错误,例如,每个页面上的最大搜索结果以及通过多个页面的所有结果,函数会将服务器中的所有结果返回给用户。
示例
每个...In...以下 Visual Basic 代码示例中的 Next 语句隐式调用 get__NewEnum 方法。
Dim fso As IADsFileServiceOperations
On Error GoTo Cleanup
Set fso = GetObject("WinNT://myComputer/Fabrikam01")
Dim coll As IADsCollection
Set coll = fso.Sessions
' The following statement invokes IADsCollection::get__NewEnum.
For Each session In coll
MsgBox "Session name: " & session.Name
Next session
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred... " & Err.Number)
End If
Set fso = Nothing
以下 C++ 代码示例演示如何使用 IADsCollection::get__NewEnum 枚举活动文件服务会话。
HRESULT EnumCollection(IADsCollection *);
HRESULT GetACollectionOfSessions()
{
LPWSTR adspath = L"WinNT://myComputer/LanmanServer";
HRESULT hr = S_OK;
IADsCollection *pColl = NULL;
// Bind to file service operations.
IADsFileServiceOperations *pFso = NULL;
hr = ADsGetObject(adspath,
IID_IADsFileServiceOperations,
(void**)&pFso);
if(FAILED(hr)) {goto Cleanup;}
// Get the pointer to the collection.
hr = pFso->Sessions(&pColl);
if(FAILED(hr)) {goto Cleanup;}
hr = EnumCollection(pColl);
Cleanup:
if(pColl) pColl->Release();
if(pFso) pFso->Release();
return hr;
}
HRESULT EnumCollection(IADsCollection *pColl)
{
IUnknown *pUnk=NULL;
HRESULT hr = S_OK;
// Get the Enumerator object on the collection object.
hr = pColl->get__NewEnum(&pUnk);
if(FAILED(hr)) {goto Cleanup;}
IEnumVARIANT *pEnum;
hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
if(FAILED(hr)) {goto Cleanup;}
// Enumerate the collection.
BSTR bstr = NULL;
VARIANT var;
IADs *pADs = NULL;
ULONG lFetch;
IDispatch *pDisp = NULL;
VariantInit(&var);
hr = pEnum->Next(1, &var, &lFetch);
while(hr == S_OK)
{
if (lFetch == 1)
{
pDisp = V_DISPATCH(&var);
pDisp->QueryInterface(IID_IADs, (void**)&pADs);
pADs->get_Name(&bstr);
printf("Session name: %S\n",bstr);
SysFreeString(bstr);
pADs->Release();
}
VariantClear(&var);
pDisp->Release();
pDisp = NULL;
hr = pEnum->Next(1, &var, &lFetch);
};
Cleanup:
if(pDisp) pDisp->Release();
if(pUnk) pUnk->Release();
if(pColl) pColl->Release();
if(pEnum) pEnum->Release();
return hr;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
最低受支持的服务器 | Windows Server 2008 |
目标平台 | Windows |
标头 | iads.h |
DLL | Activeds.dll |