Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Controls / EnumUnknown.cs / 1305600 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProtocolsConfiguration.cs
- ValueUnavailableException.cs
- CategoryValueConverter.cs
- DomainConstraint.cs
- UnaryNode.cs
- _ListenerResponseStream.cs
- Double.cs
- NativeCppClassAttribute.cs
- AddInControllerImpl.cs
- StringKeyFrameCollection.cs
- GenericWebPart.cs
- ContentPlaceHolderDesigner.cs
- HeaderedItemsControl.cs
- DnsEndPoint.cs
- BamlRecordReader.cs
- RoutedUICommand.cs
- SafeNativeMethods.cs
- StatusCommandUI.cs
- MLangCodePageEncoding.cs
- C14NUtil.cs
- LogEntryHeaderSerializer.cs
- LinqMaximalSubtreeNominator.cs
- ContentType.cs
- DelegateHelpers.Generated.cs
- CaseCqlBlock.cs
- StringAttributeCollection.cs
- PropertyChangedEventManager.cs
- PageAsyncTaskManager.cs
- BehaviorDragDropEventArgs.cs
- DesigntimeLicenseContext.cs
- FieldCollectionEditor.cs
- DataRowExtensions.cs
- RandomNumberGenerator.cs
- TextTreeTextBlock.cs
- XmlUnspecifiedAttribute.cs
- CodeRemoveEventStatement.cs
- GridView.cs
- AttributeEmitter.cs
- XPathDescendantIterator.cs
- ListItem.cs
- NameObjectCollectionBase.cs
- ListManagerBindingsCollection.cs
- WebBaseEventKeyComparer.cs
- LinkDescriptor.cs
- VirtualizedItemProviderWrapper.cs
- FormClosedEvent.cs
- QueueSurrogate.cs
- DeferredTextReference.cs
- OleDbDataAdapter.cs
- odbcmetadatafactory.cs
- AttributeAction.cs
- SafeCertificateStore.cs
- ListSourceHelper.cs
- QueryCacheKey.cs
- MSAAWinEventWrap.cs
- D3DImage.cs
- DetailsViewCommandEventArgs.cs
- ImageDrawing.cs
- AsymmetricSignatureFormatter.cs
- ObjectPropertyMapping.cs
- ConstructorNeedsTagAttribute.cs
- AlternateView.cs
- ListViewInsertedEventArgs.cs
- RectangleGeometry.cs
- regiisutil.cs
- DataColumn.cs
- RectKeyFrameCollection.cs
- CqlBlock.cs
- ListViewItem.cs
- SpellerStatusTable.cs
- PathFigure.cs
- LiteralControl.cs
- CodeIdentifier.cs
- BitmapEffectState.cs
- ObjectDataSourceEventArgs.cs
- KeyedHashAlgorithm.cs
- CodeTypeReferenceExpression.cs
- SelfIssuedSamlTokenFactory.cs
- Facet.cs
- ColorMatrix.cs
- DriveInfo.cs
- CellPartitioner.cs
- ParameterCollection.cs
- PeerNameRecordCollection.cs
- ComponentDispatcherThread.cs
- SHA1.cs
- RepeaterDataBoundAdapter.cs
- HtmlShim.cs
- RequestCache.cs
- OleDbInfoMessageEvent.cs
- AVElementHelper.cs
- WorkflowOperationContext.cs
- SqlConnectionManager.cs
- SelectionPatternIdentifiers.cs
- QueryCacheEntry.cs
- SystemUdpStatistics.cs
- GridViewRow.cs
- DecoratedNameAttribute.cs
- DrawingAttributeSerializer.cs
- ExtensionMethods.cs