Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / MS / Internal / Controls / EnumUnknown.cs / 1 / EnumUnknown.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Helper object implementing IEnumUnknown for enumerating controls
//
// Source copied from AxContainer.cs
//
// History
// 04/17/05 KusumaV Created
//
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Security;
using MS.Win32;
namespace MS.Internal.Controls
{
#region class EnumUnknown
internal class EnumUnknown : UnsafeNativeMethods.IEnumUnknown
{
private Object[] arr;
private int loc;
private int size;
internal EnumUnknown(Object[] arr)
{
this.arr = arr;
this.loc = 0;
this.size = (arr == null) ? 0 : arr.Length;
}
private EnumUnknown(Object[] arr, int loc)
: this(arr)
{
this.loc = loc;
}
///
/// Critical: Takes arbitrary pointers, writes to memory
///
[SecurityCritical]
unsafe int UnsafeNativeMethods.IEnumUnknown.Next(int celt, IntPtr rgelt, IntPtr pceltFetched)
{
if (pceltFetched != IntPtr.Zero)
Marshal.WriteInt32(pceltFetched, 0, 0);
if (celt < 0)
{
return NativeMethods.E_INVALIDARG;
}
int fetched = 0;
if (this.loc >= this.size)
{
fetched = 0;
}
else
{
for (; this.loc < this.size && fetched < celt; ++(this.loc))
{
if (this.arr[this.loc] != null)
{
Marshal.WriteIntPtr(rgelt, Marshal.GetIUnknownForObject(this.arr[this.loc]));
rgelt = (IntPtr)((long)rgelt + (long)sizeof(IntPtr));
++fetched;
}
}
}
if (pceltFetched != IntPtr.Zero)
Marshal.WriteInt32(pceltFetched, 0, fetched);
if (fetched != celt)
{
return (NativeMethods.S_FALSE);
}
return NativeMethods.S_OK;
}
int UnsafeNativeMethods.IEnumUnknown.Skip(int celt)
{
this.loc += celt;
if (this.loc >= this.size)
{
return (NativeMethods.S_FALSE);
}
return NativeMethods.S_OK;
}
void UnsafeNativeMethods.IEnumUnknown.Reset()
{
this.loc = 0;
}
void UnsafeNativeMethods.IEnumUnknown.Clone(out UnsafeNativeMethods.IEnumUnknown ppenum)
{
ppenum = new EnumUnknown(this.arr, this.loc);
}
}
#endregion class EnumUnknown
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Helper object implementing IEnumUnknown for enumerating controls
//
// Source copied from AxContainer.cs
//
// History
// 04/17/05 KusumaV Created
//
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Security;
using MS.Win32;
namespace MS.Internal.Controls
{
#region class EnumUnknown
internal class EnumUnknown : UnsafeNativeMethods.IEnumUnknown
{
private Object[] arr;
private int loc;
private int size;
internal EnumUnknown(Object[] arr)
{
this.arr = arr;
this.loc = 0;
this.size = (arr == null) ? 0 : arr.Length;
}
private EnumUnknown(Object[] arr, int loc)
: this(arr)
{
this.loc = loc;
}
///
/// Critical: Takes arbitrary pointers, writes to memory
///
[SecurityCritical]
unsafe int UnsafeNativeMethods.IEnumUnknown.Next(int celt, IntPtr rgelt, IntPtr pceltFetched)
{
if (pceltFetched != IntPtr.Zero)
Marshal.WriteInt32(pceltFetched, 0, 0);
if (celt < 0)
{
return NativeMethods.E_INVALIDARG;
}
int fetched = 0;
if (this.loc >= this.size)
{
fetched = 0;
}
else
{
for (; this.loc < this.size && fetched < celt; ++(this.loc))
{
if (this.arr[this.loc] != null)
{
Marshal.WriteIntPtr(rgelt, Marshal.GetIUnknownForObject(this.arr[this.loc]));
rgelt = (IntPtr)((long)rgelt + (long)sizeof(IntPtr));
++fetched;
}
}
}
if (pceltFetched != IntPtr.Zero)
Marshal.WriteInt32(pceltFetched, 0, fetched);
if (fetched != celt)
{
return (NativeMethods.S_FALSE);
}
return NativeMethods.S_OK;
}
int UnsafeNativeMethods.IEnumUnknown.Skip(int celt)
{
this.loc += celt;
if (this.loc >= this.size)
{
return (NativeMethods.S_FALSE);
}
return NativeMethods.S_OK;
}
void UnsafeNativeMethods.IEnumUnknown.Reset()
{
this.loc = 0;
}
void UnsafeNativeMethods.IEnumUnknown.Clone(out UnsafeNativeMethods.IEnumUnknown ppenum)
{
ppenum = new EnumUnknown(this.arr, this.loc);
}
}
#endregion class EnumUnknown
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DbReferenceCollection.cs
- XhtmlBasicSelectionListAdapter.cs
- CalendarModeChangedEventArgs.cs
- ImageKeyConverter.cs
- EventData.cs
- DefaultTextStore.cs
- ActiveXHelper.cs
- MappableObjectManager.cs
- BrowserTree.cs
- OutputCacheSection.cs
- FolderLevelBuildProvider.cs
- SearchExpression.cs
- UnsafeNativeMethods.cs
- BeginStoryboard.cs
- NGCSerializationManager.cs
- EllipseGeometry.cs
- FunctionUpdateCommand.cs
- SequenceNumber.cs
- HashHelper.cs
- DataShape.cs
- UntrustedRecipientException.cs
- ObjectTypeMapping.cs
- DBNull.cs
- WSHttpBindingBaseElement.cs
- TextPenaltyModule.cs
- InternalBase.cs
- DataConnectionHelper.cs
- XmlAnyElementAttribute.cs
- SamlConstants.cs
- ApplicationSettingsBase.cs
- UndoManager.cs
- ContextMenuAutomationPeer.cs
- SystemInformation.cs
- MimeTypeMapper.cs
- Property.cs
- DataGridViewEditingControlShowingEventArgs.cs
- StringSorter.cs
- ViewValidator.cs
- Monitor.cs
- ServiceOperationWrapper.cs
- ObjectDataSourceFilteringEventArgs.cs
- Operator.cs
- AuthenticationSection.cs
- IndexingContentUnit.cs
- CodeDOMUtility.cs
- OperationCanceledException.cs
- TimeSpanValidator.cs
- MobileRedirect.cs
- AssemblyUtil.cs
- CompiledELinqQueryState.cs
- WmpBitmapDecoder.cs
- GridView.cs
- ItemList.cs
- RouteValueExpressionBuilder.cs
- CompilationLock.cs
- ExpressionConverter.cs
- TrustManager.cs
- AutoResizedEvent.cs
- CallTemplateAction.cs
- CqlLexer.cs
- WebColorConverter.cs
- GridToolTip.cs
- OperationPickerDialog.designer.cs
- ZipPackage.cs
- columnmapkeybuilder.cs
- Int64AnimationBase.cs
- ZipFileInfo.cs
- NativeMethods.cs
- SettingsAttributes.cs
- Brushes.cs
- ArraySortHelper.cs
- StreamGeometry.cs
- DictionarySectionHandler.cs
- UInt64.cs
- Metafile.cs
- SoapMessage.cs
- ServiceEndpoint.cs
- ClientFormsAuthenticationCredentials.cs
- TimeSpanConverter.cs
- ControlPaint.cs
- DataGridViewColumnCollection.cs
- WebPartDisplayMode.cs
- OciLobLocator.cs
- TreeViewAutomationPeer.cs
- XmlTextWriter.cs
- WebPartsPersonalization.cs
- ByteAnimation.cs
- TransformValueSerializer.cs
- DataTemplateSelector.cs
- StreamResourceInfo.cs
- StaticResourceExtension.cs
- WindowsToolbarAsMenu.cs
- DataRowCollection.cs
- ReadOnlyHierarchicalDataSource.cs
- ProfileGroupSettings.cs
- UserNamePasswordValidationMode.cs
- KoreanLunisolarCalendar.cs
- MulticastOption.cs
- ProfilePropertySettingsCollection.cs
- WebPartManagerDesigner.cs