Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / ArgIterator.cs / 1 / ArgIterator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== namespace System { using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; // This class will not be marked serializable [StructLayout(LayoutKind.Auto)] public struct ArgIterator { [MethodImplAttribute(MethodImplOptions.InternalCall)] private extern ArgIterator(IntPtr arglist); // create an arg iterator that points at the first argument that // is not statically declared (that is the first ... arg) // 'arglist' is the value returned by the ARGLIST instruction public ArgIterator(RuntimeArgumentHandle arglist) : this(arglist.Value) { } [MethodImplAttribute(MethodImplOptions.InternalCall)] private unsafe extern ArgIterator(IntPtr arglist, void *ptr); // create an arg iterator that points just past 'firstArg'. // 'arglist' is the value returned by the ARGLIST instruction // This is much like the C va_start macro [CLSCompliant(false)] public unsafe ArgIterator(RuntimeArgumentHandle arglist, void* ptr) : this(arglist.Value, ptr) { } // Fetch an argument as a typed referece, advance the iterator. // Throws an exception if past end of argument list [CLSCompliant(false)] public TypedReference GetNextArg() { TypedReference result = new TypedReference (); // reference to TypedReference is banned, so have to pass result as pointer unsafe { FCallGetNextArg (&result); } return result; } [MethodImplAttribute(MethodImplOptions.InternalCall)] // reference to TypedReference is banned, so have to pass result as void pointer private unsafe extern void FCallGetNextArg(void * result); // Alternate version of GetNextArg() intended primarily for IJW code // generated by VC's "va_arg()" construct. [CLSCompliant(false)] public TypedReference GetNextArg(RuntimeTypeHandle rth) { if (sigPtr != IntPtr.Zero) { // This is an ordinary ArgIterator capable of determining // types from a signature. Just do a regular GetNextArg. return GetNextArg(); } else { // Prevent abuse of this API with a default ArgIterator (it // doesn't require permission to create a zero-inited value // type). Check that ArgPtr isn't zero or this API will allow a // malicious caller to increment the pointer to an arbitrary // location in memory and read the contents. if (ArgPtr == IntPtr.Zero) throw new ArgumentNullException(); TypedReference result = new TypedReference (); // reference to TypedReference is banned, so have to pass result as pointer unsafe { InternalGetNextArg(&result, rth); } return result; } } [MethodImplAttribute(MethodImplOptions.InternalCall)] // reference to TypedReference is banned, so have to pass result as void pointer private unsafe extern void InternalGetNextArg(void * result, RuntimeTypeHandle rth); // This method should invalidate the iterator (va_end). It is not supported yet. public void End() { } // How many arguments are left in the list [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern int GetRemainingCount(); // Gets the type of the current arg, does NOT advance the iterator [MethodImplAttribute(MethodImplOptions.InternalCall)] private extern unsafe void* _GetNextArgType(); public unsafe RuntimeTypeHandle GetNextArgType() { return new RuntimeTypeHandle(_GetNextArgType()); } public override int GetHashCode() { return unchecked((int)((long)ArgCookie)); } // Inherited from object public override bool Equals(Object o) { throw new NotSupportedException(Environment.GetResourceString("NotSupported_NYI")); } private IntPtr ArgCookie; // Cookie from the EE. // The SigPtr structure consists of the following members private IntPtr sigPtr; // Pointer to remaining signature. private IntPtr sigPtrLen; // Remaining length of the pointer // Note, sigPtrLen is actually a DWORD, but on 64bit systems this structure becomes // 8-byte aligned, which requires us to pad it. private IntPtr ArgPtr; // Pointer to remaining args. private int RemainingArgs; // # of remaining args. } }
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TrackPointCollection.cs
- MyContact.cs
- ConnectionPoint.cs
- RsaKeyIdentifierClause.cs
- SessionPageStateSection.cs
- Maps.cs
- DeclaredTypeValidator.cs
- ToolStripOverflowButton.cs
- ItemChangedEventArgs.cs
- CertificateManager.cs
- DynamicControl.cs
- TimeSpan.cs
- CorrelationManager.cs
- WebPartMenu.cs
- DesignerLabelAdapter.cs
- FixedSchema.cs
- GroupItem.cs
- HitTestFilterBehavior.cs
- ClassData.cs
- MinimizableAttributeTypeConverter.cs
- HScrollProperties.cs
- PersistChildrenAttribute.cs
- TypedReference.cs
- TextBoxRenderer.cs
- EndEvent.cs
- PropertyPushdownHelper.cs
- ForAllOperator.cs
- RadialGradientBrush.cs
- DependencyProperty.cs
- InvalidStoreProtectionKeyException.cs
- RolePrincipal.cs
- BufferBuilder.cs
- PeerNodeAddress.cs
- DetailsViewDeletedEventArgs.cs
- GlyphingCache.cs
- CaseCqlBlock.cs
- BitmapInitialize.cs
- ArcSegment.cs
- SuppressMergeCheckAttribute.cs
- LinqDataSourceInsertEventArgs.cs
- C14NUtil.cs
- WebServicesSection.cs
- DBConnection.cs
- XsdBuilder.cs
- documentsequencetextcontainer.cs
- Selection.cs
- TabItemWrapperAutomationPeer.cs
- ListCollectionView.cs
- HashMembershipCondition.cs
- Window.cs
- LoginCancelEventArgs.cs
- Simplifier.cs
- Application.cs
- CharUnicodeInfo.cs
- CodeSnippetTypeMember.cs
- UIElement3D.cs
- smtppermission.cs
- ExpressionTable.cs
- ValuePatternIdentifiers.cs
- SmtpNegotiateAuthenticationModule.cs
- DataGridViewDesigner.cs
- StateMachineAction.cs
- NetStream.cs
- _TLSstream.cs
- ProgressBarHighlightConverter.cs
- Throw.cs
- ResXBuildProvider.cs
- CommentEmitter.cs
- ObjectMemberMapping.cs
- TranslateTransform.cs
- SqlGatherProducedAliases.cs
- SimpleWebHandlerParser.cs
- DataRow.cs
- FormsAuthenticationUserCollection.cs
- IsolatedStorageFileStream.cs
- XPathNodeList.cs
- OneOfElement.cs
- RegexRunner.cs
- LinqExpressionNormalizer.cs
- LazyTextWriterCreator.cs
- Point3DConverter.cs
- StringUtil.cs
- ImageEditor.cs
- ZoneMembershipCondition.cs
- EmptyStringExpandableObjectConverter.cs
- WindowsToolbarItemAsMenuItem.cs
- HttpServerUtilityBase.cs
- FilteredSchemaElementLookUpTable.cs
- HostSecurityManager.cs
- DateTimeUtil.cs
- BookmarkWorkItem.cs
- XpsFont.cs
- ExpanderAutomationPeer.cs
- ExceptionUtility.cs
- Rotation3DAnimationBase.cs
- DispatcherExceptionFilterEventArgs.cs
- AutoFocusStyle.xaml.cs
- AuthStoreRoleProvider.cs
- QuaternionAnimationBase.cs
- OracleDataReader.cs