Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SponsorHelper.cs
- CustomValidator.cs
- X509Logo.cs
- DataGridCommandEventArgs.cs
- ListViewDataItem.cs
- CursorConverter.cs
- XmlSerializableWriter.cs
- TextRunProperties.cs
- ZoomingMessageFilter.cs
- IERequestCache.cs
- UnicastIPAddressInformationCollection.cs
- GroupByExpressionRewriter.cs
- CancellationState.cs
- ServiceOperationListItem.cs
- DropShadowEffect.cs
- TextTreeInsertElementUndoUnit.cs
- DbProviderManifest.cs
- MarginCollapsingState.cs
- DbMetaDataFactory.cs
- HtmlButton.cs
- SwitchLevelAttribute.cs
- LinearQuaternionKeyFrame.cs
- XDeferredAxisSource.cs
- SqlDataSourceEnumerator.cs
- Privilege.cs
- _AcceptOverlappedAsyncResult.cs
- PenCursorManager.cs
- ParamArrayAttribute.cs
- DataServiceEntityAttribute.cs
- KeyNotFoundException.cs
- Coordinator.cs
- WrapPanel.cs
- WindowsListViewGroup.cs
- ListItemParagraph.cs
- DisplayMemberTemplateSelector.cs
- safex509handles.cs
- ResponseBodyWriter.cs
- DataGridViewComboBoxEditingControl.cs
- SimpleWebHandlerParser.cs
- DodSequenceMerge.cs
- EventSinkActivity.cs
- CustomExpression.cs
- UnmanagedMemoryStreamWrapper.cs
- Application.cs
- DomainConstraint.cs
- EmptyEnumerator.cs
- XPathNavigatorReader.cs
- Fault.cs
- WmlSelectionListAdapter.cs
- AutomationPropertyInfo.cs
- DeferredSelectedIndexReference.cs
- SyndicationCategory.cs
- PreservationFileWriter.cs
- OptimalTextSource.cs
- XmlSchemaAnnotated.cs
- Axis.cs
- TextTreeTextBlock.cs
- AlphabeticalEnumConverter.cs
- TableLayoutColumnStyleCollection.cs
- TimeoutHelper.cs
- COAUTHIDENTITY.cs
- MediaContext.cs
- QueueProcessor.cs
- DisplayMemberTemplateSelector.cs
- ResourceDictionary.cs
- VScrollBar.cs
- BooleanSwitch.cs
- MemberMemberBinding.cs
- TextRunProperties.cs
- SiteMapPath.cs
- CodeStatement.cs
- TriggerBase.cs
- messageonlyhwndwrapper.cs
- BinHexDecoder.cs
- adornercollection.cs
- WindowsFormsHostPropertyMap.cs
- TableLayoutPanelResizeGlyph.cs
- TreeNodeStyle.cs
- Cast.cs
- DoubleAverageAggregationOperator.cs
- XmlSignificantWhitespace.cs
- TextServicesPropertyRanges.cs
- WebPartEditVerb.cs
- HwndTarget.cs
- ImageInfo.cs
- ServiceModelInstallComponent.cs
- MediaTimeline.cs
- StandardBindingImporter.cs
- SmiMetaDataProperty.cs
- StylusButtonCollection.cs
- ServicesUtilities.cs
- XmlAutoDetectWriter.cs
- HttpClientCertificate.cs
- HyperLinkField.cs
- SessionParameter.cs
- AppLevelCompilationSectionCache.cs
- DispatchChannelSink.cs
- Gdiplus.cs
- GetIndexBinder.cs
- SessionEndingEventArgs.cs