Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Runtime / InteropServices / TCEAdapterGen / TCEAdapterGenerator.cs / 1 / TCEAdapterGenerator.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
namespace System.Runtime.InteropServices.TCEAdapterGen {
using System.Runtime.InteropServices;
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Collections;
using System.Threading;
internal class TCEAdapterGenerator
{
public void Process(ModuleBuilder ModBldr, ArrayList EventItfList)
{
// Store the input/output module.
m_Module = ModBldr;
// Generate the TCE adapters for all the event sources.
int NumEvItfs = EventItfList.Count;
for ( int cEventItfs = 0; cEventItfs < NumEvItfs; cEventItfs++ )
{
// Retrieve the event interface info.
EventItfInfo CurrEventItf = (EventItfInfo)EventItfList[cEventItfs];
// Retrieve the information from the event interface info.
Type EventItfType = CurrEventItf.GetEventItfType();
Type SrcItfType = CurrEventItf.GetSrcItfType();
String EventProviderName = CurrEventItf.GetEventProviderName();
// Generate the sink interface helper.
Type SinkHelperType = new EventSinkHelperWriter( m_Module, SrcItfType, EventItfType ).Perform();
// Generate the event provider.
new EventProviderWriter( m_Module, EventProviderName, EventItfType, SrcItfType, SinkHelperType ).Perform();
}
}
internal static void SetClassInterfaceTypeToNone(TypeBuilder tb)
{
// Create the ClassInterface(ClassInterfaceType.None) CA builder if we haven't created it yet.
if (s_NoClassItfCABuilder == null)
{
Type []aConsParams = new Type[1];
aConsParams[0] = typeof(ClassInterfaceType);
ConstructorInfo Cons = typeof(ClassInterfaceAttribute).GetConstructor(aConsParams);
Object[] aArgs = new Object[1];
aArgs[0] = ClassInterfaceType.None;
s_NoClassItfCABuilder = new CustomAttributeBuilder(Cons, aArgs);
}
// Set the class interface type to none.
tb.SetCustomAttribute(s_NoClassItfCABuilder);
}
internal static TypeBuilder DefineUniqueType(String strInitFullName, TypeAttributes attrs, Type BaseType, Type[] aInterfaceTypes, ModuleBuilder mb)
{
String strFullName = strInitFullName;
int PostFix = 2;
// Find the first unique name for the type.
for (; mb.GetType(strFullName) != null; strFullName = strInitFullName + "_" + PostFix, PostFix++);
// Define a type with the determined unique name.
return mb.DefineType(strFullName, attrs, BaseType, aInterfaceTypes);
}
internal static void SetHiddenAttribute(TypeBuilder tb)
{
if (s_HiddenCABuilder == null)
{
// Hide the type from Object Browsers
Type []aConsParams = new Type[1];
aConsParams[0] = typeof(TypeLibTypeFlags);
ConstructorInfo Cons = typeof(TypeLibTypeAttribute).GetConstructor(aConsParams);
Object []aArgs = new Object[1];
aArgs[0] = TypeLibTypeFlags.FHidden;
s_HiddenCABuilder = new CustomAttributeBuilder(Cons, aArgs);
}
tb.SetCustomAttribute(s_HiddenCABuilder);
}
internal static MethodInfo[] GetNonPropertyMethods(Type type)
{
MethodInfo[] aMethods = type.GetMethods();
ArrayList methods = new ArrayList(aMethods);
PropertyInfo[] props = type.GetProperties();
foreach(PropertyInfo prop in props)
{
MethodInfo[] accessors = prop.GetAccessors();
foreach (MethodInfo accessor in accessors)
{
for (int i=0; i < methods.Count; i++)
{
if ((MethodInfo)methods[i] == accessor)
methods.RemoveAt(i);
}
}
}
MethodInfo[] retMethods = new MethodInfo[methods.Count];
methods.CopyTo(retMethods);
return retMethods;
}
internal static MethodInfo[] GetPropertyMethods(Type type)
{
MethodInfo[] aMethods = type.GetMethods();
ArrayList methods = new ArrayList();
PropertyInfo[] props = type.GetProperties();
foreach(PropertyInfo prop in props)
{
MethodInfo[] accessors = prop.GetAccessors();
foreach (MethodInfo accessor in accessors)
{
methods.Add(accessor);
}
}
MethodInfo[] retMethods = new MethodInfo[methods.Count];
methods.CopyTo(retMethods);
return retMethods;
}
private ModuleBuilder m_Module = null;
private Hashtable m_SrcItfToSrcItfInfoMap = new Hashtable();
private static CustomAttributeBuilder s_NoClassItfCABuilder = null;
private static CustomAttributeBuilder s_HiddenCABuilder = null;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
namespace System.Runtime.InteropServices.TCEAdapterGen {
using System.Runtime.InteropServices;
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Collections;
using System.Threading;
internal class TCEAdapterGenerator
{
public void Process(ModuleBuilder ModBldr, ArrayList EventItfList)
{
// Store the input/output module.
m_Module = ModBldr;
// Generate the TCE adapters for all the event sources.
int NumEvItfs = EventItfList.Count;
for ( int cEventItfs = 0; cEventItfs < NumEvItfs; cEventItfs++ )
{
// Retrieve the event interface info.
EventItfInfo CurrEventItf = (EventItfInfo)EventItfList[cEventItfs];
// Retrieve the information from the event interface info.
Type EventItfType = CurrEventItf.GetEventItfType();
Type SrcItfType = CurrEventItf.GetSrcItfType();
String EventProviderName = CurrEventItf.GetEventProviderName();
// Generate the sink interface helper.
Type SinkHelperType = new EventSinkHelperWriter( m_Module, SrcItfType, EventItfType ).Perform();
// Generate the event provider.
new EventProviderWriter( m_Module, EventProviderName, EventItfType, SrcItfType, SinkHelperType ).Perform();
}
}
internal static void SetClassInterfaceTypeToNone(TypeBuilder tb)
{
// Create the ClassInterface(ClassInterfaceType.None) CA builder if we haven't created it yet.
if (s_NoClassItfCABuilder == null)
{
Type []aConsParams = new Type[1];
aConsParams[0] = typeof(ClassInterfaceType);
ConstructorInfo Cons = typeof(ClassInterfaceAttribute).GetConstructor(aConsParams);
Object[] aArgs = new Object[1];
aArgs[0] = ClassInterfaceType.None;
s_NoClassItfCABuilder = new CustomAttributeBuilder(Cons, aArgs);
}
// Set the class interface type to none.
tb.SetCustomAttribute(s_NoClassItfCABuilder);
}
internal static TypeBuilder DefineUniqueType(String strInitFullName, TypeAttributes attrs, Type BaseType, Type[] aInterfaceTypes, ModuleBuilder mb)
{
String strFullName = strInitFullName;
int PostFix = 2;
// Find the first unique name for the type.
for (; mb.GetType(strFullName) != null; strFullName = strInitFullName + "_" + PostFix, PostFix++);
// Define a type with the determined unique name.
return mb.DefineType(strFullName, attrs, BaseType, aInterfaceTypes);
}
internal static void SetHiddenAttribute(TypeBuilder tb)
{
if (s_HiddenCABuilder == null)
{
// Hide the type from Object Browsers
Type []aConsParams = new Type[1];
aConsParams[0] = typeof(TypeLibTypeFlags);
ConstructorInfo Cons = typeof(TypeLibTypeAttribute).GetConstructor(aConsParams);
Object []aArgs = new Object[1];
aArgs[0] = TypeLibTypeFlags.FHidden;
s_HiddenCABuilder = new CustomAttributeBuilder(Cons, aArgs);
}
tb.SetCustomAttribute(s_HiddenCABuilder);
}
internal static MethodInfo[] GetNonPropertyMethods(Type type)
{
MethodInfo[] aMethods = type.GetMethods();
ArrayList methods = new ArrayList(aMethods);
PropertyInfo[] props = type.GetProperties();
foreach(PropertyInfo prop in props)
{
MethodInfo[] accessors = prop.GetAccessors();
foreach (MethodInfo accessor in accessors)
{
for (int i=0; i < methods.Count; i++)
{
if ((MethodInfo)methods[i] == accessor)
methods.RemoveAt(i);
}
}
}
MethodInfo[] retMethods = new MethodInfo[methods.Count];
methods.CopyTo(retMethods);
return retMethods;
}
internal static MethodInfo[] GetPropertyMethods(Type type)
{
MethodInfo[] aMethods = type.GetMethods();
ArrayList methods = new ArrayList();
PropertyInfo[] props = type.GetProperties();
foreach(PropertyInfo prop in props)
{
MethodInfo[] accessors = prop.GetAccessors();
foreach (MethodInfo accessor in accessors)
{
methods.Add(accessor);
}
}
MethodInfo[] retMethods = new MethodInfo[methods.Count];
methods.CopyTo(retMethods);
return retMethods;
}
private ModuleBuilder m_Module = null;
private Hashtable m_SrcItfToSrcItfInfoMap = new Hashtable();
private static CustomAttributeBuilder s_NoClassItfCABuilder = null;
private static CustomAttributeBuilder s_HiddenCABuilder = null;
}
}
// 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
- DateTimePickerDesigner.cs
- EditorResources.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- BrowserCapabilitiesFactory.cs
- Matrix3DValueSerializer.cs
- MailAddress.cs
- KoreanCalendar.cs
- ImageKeyConverter.cs
- ImageSource.cs
- ChildTable.cs
- DataRelationPropertyDescriptor.cs
- BinarySecretKeyIdentifierClause.cs
- CodeArrayCreateExpression.cs
- AggregationMinMaxHelpers.cs
- ClientApiGenerator.cs
- MDIControlStrip.cs
- OleDbErrorCollection.cs
- FreezableCollection.cs
- TypographyProperties.cs
- SortedList.cs
- ColorTransform.cs
- DataRowComparer.cs
- QilTargetType.cs
- TableLayoutRowStyleCollection.cs
- ResponseStream.cs
- XmlSchemaSimpleContentRestriction.cs
- ServiceBusyException.cs
- MailAddressParser.cs
- WebPartUserCapability.cs
- DoubleCollection.cs
- DNS.cs
- SslSecurityTokenParameters.cs
- SafeArrayRankMismatchException.cs
- DateTimeConverter2.cs
- OracleTimeSpan.cs
- ToolStripContentPanel.cs
- OutputCacheEntry.cs
- PropertyConverter.cs
- AsyncOperation.cs
- CalloutQueueItem.cs
- NextPreviousPagerField.cs
- CodeVariableDeclarationStatement.cs
- FontClient.cs
- Matrix.cs
- IdentityReference.cs
- KeyConverter.cs
- WebBodyFormatMessageProperty.cs
- FreeFormDragDropManager.cs
- RegexRunnerFactory.cs
- XmlSchemaSimpleContentRestriction.cs
- SQLChars.cs
- SendReply.cs
- PriorityBindingExpression.cs
- DbConnectionStringCommon.cs
- ComMethodElementCollection.cs
- ExternalCalls.cs
- TextDecoration.cs
- HttpDictionary.cs
- DbBuffer.cs
- ListBoxItemAutomationPeer.cs
- ContainerSelectorActiveEvent.cs
- EdmScalarPropertyAttribute.cs
- NoneExcludedImageIndexConverter.cs
- XamlToRtfParser.cs
- PriorityBindingExpression.cs
- InsufficientExecutionStackException.cs
- SettingsPropertyValueCollection.cs
- XmlSchemaSimpleTypeList.cs
- BindingExpressionBase.cs
- FlagsAttribute.cs
- MobileTemplatedControlDesigner.cs
- Config.cs
- EntityViewGenerationConstants.cs
- ToolStripStatusLabel.cs
- FullTextBreakpoint.cs
- BasicExpandProvider.cs
- SynchronizedInputPattern.cs
- FtpRequestCacheValidator.cs
- ProviderCommandInfoUtils.cs
- ToolStripLabel.cs
- XmlSchemaAnnotation.cs
- MemoryRecordBuffer.cs
- ModuleConfigurationInfo.cs
- DbConnectionPoolIdentity.cs
- BindingList.cs
- PropertyGridEditorPart.cs
- Quaternion.cs
- SqlReorderer.cs
- HandlerFactoryCache.cs
- MergeEnumerator.cs
- InvokeWebService.cs
- UrlMapping.cs
- listitem.cs
- FixUp.cs
- HwndHostAutomationPeer.cs
- ComponentGuaranteesAttribute.cs
- DataBoundControlAdapter.cs
- CompositeFontInfo.cs
- SQLDoubleStorage.cs
- LazyTextWriterCreator.cs