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
- DSASignatureDeformatter.cs
- TrackBarRenderer.cs
- NamespaceList.cs
- Int64Converter.cs
- Attributes.cs
- VectorValueSerializer.cs
- InvariantComparer.cs
- StrongName.cs
- DataControlCommands.cs
- ExceptionValidationRule.cs
- DataView.cs
- HelpEvent.cs
- SqlParameterizer.cs
- AttributeCallbackBuilder.cs
- PaperSource.cs
- TextElementCollectionHelper.cs
- RtfNavigator.cs
- CategoriesDocumentFormatter.cs
- NavigationExpr.cs
- ColorContextHelper.cs
- ComplexBindingPropertiesAttribute.cs
- DataExchangeServiceBinder.cs
- SymLanguageType.cs
- ValidationErrorCollection.cs
- SystemPens.cs
- MessageEncodingBindingElementImporter.cs
- CompositeDuplexBindingElementImporter.cs
- XmlSchemaElement.cs
- ListControlConvertEventArgs.cs
- QilLiteral.cs
- DrawItemEvent.cs
- EdmRelationshipRoleAttribute.cs
- ListViewItem.cs
- ViewBase.cs
- UITypeEditor.cs
- DataRecordInternal.cs
- DataServiceSaveChangesEventArgs.cs
- PropertyChangingEventArgs.cs
- PackWebResponse.cs
- SqlFlattener.cs
- FileAuthorizationModule.cs
- CodeCatchClause.cs
- XmlReaderSettings.cs
- GraphicsPath.cs
- OleServicesContext.cs
- BaseCollection.cs
- SQLGuid.cs
- ReachDocumentReferenceCollectionSerializer.cs
- TraceUtils.cs
- _ChunkParse.cs
- UrlMappingsModule.cs
- ToolStripSystemRenderer.cs
- ObsoleteAttribute.cs
- XmlSequenceWriter.cs
- InputProcessorProfiles.cs
- GeometryGroup.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- HttpCachePolicyWrapper.cs
- Span.cs
- StateMachineAction.cs
- Metadata.cs
- OwnerDrawPropertyBag.cs
- ColorDialog.cs
- HttpProcessUtility.cs
- PrintDialog.cs
- DataRowCollection.cs
- SocketAddress.cs
- HeaderElement.cs
- RegexWriter.cs
- RegexCapture.cs
- ViewKeyConstraint.cs
- MessageDecoder.cs
- PageAsyncTask.cs
- WindowsProgressbar.cs
- DrawingAttributesDefaultValueFactory.cs
- CodeDelegateCreateExpression.cs
- DNS.cs
- LateBoundBitmapDecoder.cs
- SyndicationElementExtension.cs
- MimeFormatter.cs
- PartitionerStatic.cs
- WebControlParameterProxy.cs
- DataIdProcessor.cs
- UIElementParagraph.cs
- ZipIOExtraField.cs
- TraceHandlerErrorFormatter.cs
- WebPartDisplayModeCollection.cs
- Parallel.cs
- MediaTimeline.cs
- GlyphRunDrawing.cs
- XmlSecureResolver.cs
- DBConcurrencyException.cs
- UrlMappingCollection.cs
- CriticalHandle.cs
- CodeLinePragma.cs
- TypedServiceChannelBuilder.cs
- ReferentialConstraint.cs
- DynamicResourceExtension.cs
- UIPermission.cs
- EndpointNameMessageFilter.cs