Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Reflection / Emit / MethodRental.cs / 3 / MethodRental.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: MethodRental ** ** ** MethodRental class is to provide a fast way to swap method body implementation ** given a method of a class ** ** ===========================================================*/ namespace System.Reflection.Emit { using System; using System.Reflection; using System.Threading; using System.Runtime.CompilerServices; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Globalization; // MethodRental class provides the ability to insert a new method body of an // existing method on a class defined in a DynamicModule. // Can throw OutOfMemory exception. // //This class contains only static methods and does not require serialization. [HostProtection(MayLeakOnAbort = true)] [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(_MethodRental))] [System.Runtime.InteropServices.ComVisible(true)] sealed public class MethodRental : _MethodRental { public const int JitOnDemand = 0x0000; // jit the method body when it is necessary public const int JitImmediate = 0x0001; // jit the method body now [SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode=true)] public static void SwapMethodBody( Type cls, // [in] class containing the method int methodtoken, // [in] method token IntPtr rgIL, // [in] pointer to bytes int methodSize, // [in] the size of the new method body in bytes int flags) // [in] flags { if (methodSize <= 0 || methodSize >= 0x3f0000) throw new ArgumentException(Environment.GetResourceString("Argument_BadSizeForData"), "methodSize"); if (cls==null) throw new ArgumentNullException("cls"); // can only swap method body on dynamic module if (!(cls.Module is ModuleBuilder)) throw new NotSupportedException(Environment.GetResourceString("NotSupported_NotDynamicModule")); RuntimeType rType; if (cls is TypeBuilder) { // If it is a TypeBuilder, make sure that TypeBuilder is already been baked. TypeBuilder typeBuilder = (TypeBuilder) cls; if (typeBuilder.m_hasBeenCreated == false) throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("NotSupported_NotAllTypesAreBaked"), typeBuilder.Name)); // get the corresponding runtime type for the TypeBuilder. rType = typeBuilder.m_runtimeType as RuntimeType; } else { rType = cls as RuntimeType; } if (rType == null) throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeType"), "cls"); StackCrawlMark mark = StackCrawlMark.LookForMyCaller; if (rType.Assembly.m_assemblyData.m_isSynchronized) { lock(rType.Assembly.m_assemblyData) { SwapMethodBodyHelper(rType, methodtoken, rgIL, methodSize, flags, ref mark); } } else { SwapMethodBodyHelper(rType, methodtoken, rgIL, methodSize, flags, ref mark); } } [MethodImplAttribute(MethodImplOptions.InternalCall)] internal extern static void SwapMethodBodyHelper( RuntimeType cls, // [in] class containing the method int methodtoken, // [in] method token IntPtr rgIL, // [in] pointer to bytes int methodSize, // [in] the size of the new method body in bytes int flags, // [in] flags ref StackCrawlMark stackMark); // [in] stack crawl mark used to find caller // private constructor to prevent class to be constructed. private MethodRental() {} void _MethodRental.GetTypeInfoCount(out uint pcTInfo) { throw new NotImplementedException(); } void _MethodRental.GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo) { throw new NotImplementedException(); } void _MethodRental.GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId) { throw new NotImplementedException(); } void _MethodRental.Invoke(uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr) { throw new NotImplementedException(); } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TaiwanCalendar.cs
- WeakReadOnlyCollection.cs
- CircleHotSpot.cs
- VirtualDirectoryMapping.cs
- ObjectStorage.cs
- GraphicsState.cs
- ProfileServiceManager.cs
- WebPartManager.cs
- ObjectContext.cs
- StorageConditionPropertyMapping.cs
- Paragraph.cs
- ToolboxItem.cs
- NotifyInputEventArgs.cs
- TdsParserSafeHandles.cs
- NavigationExpr.cs
- DesignBindingPropertyDescriptor.cs
- ZipPackage.cs
- mansign.cs
- UnknownWrapper.cs
- Currency.cs
- basemetadatamappingvisitor.cs
- CompilerCollection.cs
- QueueAccessMode.cs
- ZipArchive.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- GridLength.cs
- TraceRecord.cs
- HtmlSelect.cs
- VirtualizedItemPattern.cs
- _NetworkingPerfCounters.cs
- DetailsViewDeleteEventArgs.cs
- recordstatefactory.cs
- DispatchWrapper.cs
- RequestSecurityTokenSerializer.cs
- SqlDataSourceWizardForm.cs
- DurableInstanceManager.cs
- InfoCardTraceRecord.cs
- SqlBulkCopy.cs
- AddressAlreadyInUseException.cs
- FunctionCommandText.cs
- DataGridViewColumnConverter.cs
- ObjectDataSource.cs
- TableCellAutomationPeer.cs
- GcHandle.cs
- OptionalColumn.cs
- UIElementHelper.cs
- DbDataRecord.cs
- XmlBaseWriter.cs
- QuaternionValueSerializer.cs
- IndexedGlyphRun.cs
- HandledEventArgs.cs
- CharEntityEncoderFallback.cs
- CompatibleIComparer.cs
- MostlySingletonList.cs
- DoubleLink.cs
- Matrix.cs
- StateDesignerConnector.cs
- DataServiceResponse.cs
- MultiPageTextView.cs
- CaseKeyBox.xaml.cs
- ElasticEase.cs
- CodeTypeDeclaration.cs
- ProxyWebPart.cs
- SessionChannels.cs
- IdentityHolder.cs
- RenameRuleObjectDialog.cs
- QueryCacheKey.cs
- Grant.cs
- AccessDataSourceView.cs
- LeafCellTreeNode.cs
- TemplateModeChangedEventArgs.cs
- SpeakInfo.cs
- Attributes.cs
- XmlDataCollection.cs
- DomainConstraint.cs
- DataObject.cs
- OleDbSchemaGuid.cs
- RenderContext.cs
- storepermissionattribute.cs
- TypeUtil.cs
- MetabaseReader.cs
- DataListCommandEventArgs.cs
- UniqueIdentifierService.cs
- WinFormsComponentEditor.cs
- RsaSecurityToken.cs
- ToolStripContentPanelRenderEventArgs.cs
- CompModSwitches.cs
- WebBrowserPermission.cs
- CustomAttributeSerializer.cs
- PointKeyFrameCollection.cs
- CompilerLocalReference.cs
- VectorAnimationUsingKeyFrames.cs
- HostedTransportConfigurationManager.cs
- IgnoreSectionHandler.cs
- ElementUtil.cs
- ReflectionHelper.cs
- BezierSegment.cs
- KnowledgeBase.cs
- PropVariant.cs
- ActivityMarkupSerializationProvider.cs