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
- AuthenticatingEventArgs.cs
- EventMappingSettingsCollection.cs
- OrderedEnumerableRowCollection.cs
- PrefixQName.cs
- WindowsGraphics2.cs
- DataTableCollection.cs
- StreamingContext.cs
- DefaultWorkflowLoaderService.cs
- ServiceModelPerformanceCounters.cs
- __ConsoleStream.cs
- RecognitionResult.cs
- NamedPipeConnectionPoolSettingsElement.cs
- SystemFonts.cs
- UnmanagedMarshal.cs
- EngineSiteSapi.cs
- log.cs
- Int16Storage.cs
- GeneralTransform.cs
- DocumentGridContextMenu.cs
- UriSection.cs
- CustomErrorsSectionWrapper.cs
- UniformGrid.cs
- RectValueSerializer.cs
- MeshGeometry3D.cs
- QueryAccessibilityHelpEvent.cs
- CheckBox.cs
- RenderData.cs
- HttpInputStream.cs
- regiisutil.cs
- SqlCacheDependencyDatabaseCollection.cs
- _NegoStream.cs
- RowBinding.cs
- Metadata.cs
- DetailsViewModeEventArgs.cs
- NavigationHelper.cs
- cookiecontainer.cs
- Char.cs
- BamlLocalizer.cs
- UniformGrid.cs
- PropertyValueUIItem.cs
- MetadataProperty.cs
- MappedMetaModel.cs
- ScrollBarAutomationPeer.cs
- ClaimTypes.cs
- CultureInfo.cs
- TextWriterTraceListener.cs
- StandardCommands.cs
- RecipientInfo.cs
- StylusPointCollection.cs
- EpmAttributeNameBuilder.cs
- CodeComment.cs
- ViewManager.cs
- NativeStructs.cs
- KeyboardNavigation.cs
- TextDecorationUnitValidation.cs
- DoubleConverter.cs
- PageCatalogPart.cs
- PassportAuthenticationEventArgs.cs
- InvokeProviderWrapper.cs
- WebPartConnectionsConfigureVerb.cs
- NumericUpDownAccelerationCollection.cs
- ServiceReference.cs
- SerializationSectionGroup.cs
- TripleDESCryptoServiceProvider.cs
- LOSFormatter.cs
- CompilerState.cs
- CollectionViewSource.cs
- XAMLParseException.cs
- TryCatch.cs
- Quaternion.cs
- DefaultValueConverter.cs
- DBSqlParserTableCollection.cs
- GlyphCache.cs
- RelationshipType.cs
- SubMenuStyle.cs
- ToolStripGrip.cs
- EntityTypeEmitter.cs
- ReferenceEqualityComparer.cs
- EntityDataSourceConfigureObjectContextPanel.cs
- Itemizer.cs
- MetadataItem_Static.cs
- GenericNameHandler.cs
- Deflater.cs
- DispatcherFrame.cs
- RegexStringValidator.cs
- SynchronizedDispatch.cs
- PortCache.cs
- XmlSchemaSequence.cs
- DesignerOptionService.cs
- ActivityCollectionMarkupSerializer.cs
- CompiledRegexRunnerFactory.cs
- XmlDomTextWriter.cs
- And.cs
- FormViewDeleteEventArgs.cs
- RetrieveVirtualItemEventArgs.cs
- FileSystemWatcher.cs
- PropertyEmitter.cs
- ProtocolViolationException.cs
- UserInitiatedNavigationPermission.cs
- TryCatchDesigner.xaml.cs