Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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. } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InternalConfirm.cs
- TakeOrSkipWhileQueryOperator.cs
- ClientConfigurationSystem.cs
- Authorization.cs
- ILGenerator.cs
- RadioButtonStandardAdapter.cs
- OleDbMetaDataFactory.cs
- WpfPayload.cs
- SecurityContextSecurityTokenAuthenticator.cs
- MemberAccessException.cs
- OdbcInfoMessageEvent.cs
- ActivityUtilities.cs
- ADMembershipUser.cs
- XmlElement.cs
- _SslStream.cs
- ProfileParameter.cs
- NativeCppClassAttribute.cs
- shaperfactory.cs
- Nullable.cs
- PointConverter.cs
- OracleInternalConnection.cs
- GenericAuthenticationEventArgs.cs
- SpeakInfo.cs
- UiaCoreProviderApi.cs
- ThicknessKeyFrameCollection.cs
- IDQuery.cs
- XmlDocumentFragment.cs
- URI.cs
- XamlBuildProvider.cs
- SocketInformation.cs
- TemplatePagerField.cs
- ComponentEditorForm.cs
- MenuItem.cs
- WebServiceResponse.cs
- ToolStripArrowRenderEventArgs.cs
- XmlAutoDetectWriter.cs
- UnaryQueryOperator.cs
- KeyValuePair.cs
- SqlDataSourceSelectingEventArgs.cs
- ProviderException.cs
- Focus.cs
- LinearGradientBrush.cs
- DataGridViewRowsRemovedEventArgs.cs
- ServicePointManager.cs
- EventSinkHelperWriter.cs
- SafeFindHandle.cs
- Stroke2.cs
- ReservationNotFoundException.cs
- DataGridViewLinkCell.cs
- Emitter.cs
- ServiceX509SecurityTokenProvider.cs
- ResourceDisplayNameAttribute.cs
- XmlSchemaCollection.cs
- DesignBindingValueUIHandler.cs
- SqlBulkCopyColumnMappingCollection.cs
- AssociationSetMetadata.cs
- RelationshipFixer.cs
- BaseParser.cs
- _UncName.cs
- ReflectEventDescriptor.cs
- HtmlAnchor.cs
- TextBoxAutomationPeer.cs
- OdbcTransaction.cs
- XamlFilter.cs
- storepermission.cs
- OfTypeExpression.cs
- ActivityWithResultValueSerializer.cs
- ExtensionWindowResizeGrip.cs
- ToolStripRenderEventArgs.cs
- RemoteWebConfigurationHost.cs
- DCSafeHandle.cs
- InputLangChangeRequestEvent.cs
- SchemaDeclBase.cs
- TransformValueSerializer.cs
- DataListGeneralPage.cs
- DependencySource.cs
- XmlQueryRuntime.cs
- WorkflowViewElement.cs
- RightNameExpirationInfoPair.cs
- AutomationProperties.cs
- SkewTransform.cs
- ColumnReorderedEventArgs.cs
- LayoutTableCell.cs
- PeekCompletedEventArgs.cs
- SQLByteStorage.cs
- ControllableStoryboardAction.cs
- CompressEmulationStream.cs
- BookmarkScopeManager.cs
- DataPagerFieldCommandEventArgs.cs
- DisplayInformation.cs
- OpenTypeLayoutCache.cs
- ZipIOExtraFieldElement.cs
- FilterQueryOptionExpression.cs
- Repeater.cs
- filewebresponse.cs
- HttpApplicationFactory.cs
- PathNode.cs
- wgx_exports.cs
- PropertyGridEditorPart.cs
- cookiecollection.cs