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 / Serialization / TypeName.cs / 3 / TypeName.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: TypeName
**
**
** Purpose: Provides some static methods to aid with type loading
** when LoadWithPartialName is used with generics.
**
**
============================================================*/
namespace System.Runtime.Serialization {
using System;
using System.Reflection;
using System.Globalization;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
class TypeName
{
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), TypeLibType((short)0x100), Guid("B81FF171-20F3-11D2-8DCC-00A0C9B00522")]
internal interface ITypeName
{
uint GetNameCount();
uint GetNames([In] uint count, IntPtr rgbszNamesArray);
uint GetTypeArgumentCount();
uint GetTypeArguments([In] uint count, IntPtr rgpArgumentsArray);
uint GetModifierLength();
uint GetModifiers([In] uint count, out uint rgModifiers);
[return: MarshalAs(UnmanagedType.BStr)]
string GetAssemblyName();
}
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), TypeLibType((short)0x100), Guid("B81FF171-20F3-11D2-8DCC-00A0C9B00521")]
internal interface ITypeNameFactory
{
[return: MarshalAs(UnmanagedType.Interface)]
ITypeName ParseTypeName([In, MarshalAs(UnmanagedType.LPWStr)] string szName, out int pError);
}
private TypeName()
{
}
internal static Type GetType(Assembly initialAssembly, string fullTypeName)
{
Type comType = Type.GetTypeFromCLSID(new Guid(0xB81FF171, 0x20F3, 0x11d2, 0x8d, 0xcc, 0x00, 0xa0, 0xc9, 0xb0, 0x05, 0x25));
ITypeNameFactory parser = (ITypeNameFactory)Activator.CreateInstance(comType);
int error;
ITypeName typeNameInfo = parser.ParseTypeName(fullTypeName, out error);
Type t = null;
if (error == -1)
{
t = LoadTypeWithPartialName(typeNameInfo, initialAssembly, fullTypeName);
}
return t;
}
static Type LoadTypeWithPartialName(ITypeName typeNameInfo, Assembly initialAssembly, string fullTypeName)
{
uint nameCount = typeNameInfo.GetNameCount();
uint argCount = typeNameInfo.GetTypeArgumentCount();
IntPtr[] names = new IntPtr[nameCount];
IntPtr[] args = new IntPtr[argCount];
try
{
Type baseType = null;
if (nameCount != 0)
{
GCHandle gch = GCHandle.Alloc(names, GCHandleType.Pinned);
nameCount = typeNameInfo.GetNames(nameCount, gch.AddrOfPinnedObject());
gch.Free();
string name = Marshal.PtrToStringBSTR(names[0]);
string asmName = typeNameInfo.GetAssemblyName();
if (!String.IsNullOrEmpty(asmName))
{
Assembly asm = Assembly.LoadWithPartialName(asmName);
if (asm == null)
{
asm = Assembly.LoadWithPartialName(new AssemblyName(asmName).Name);
}
baseType = asm.GetType(name);
}
else
{
if (initialAssembly != null)
{
baseType = initialAssembly.GetType(name);
}
else
baseType = Type.GetType(name);
}
if (baseType == null)
{
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), fullTypeName));
}
for (int i = 1; i < nameCount; i++)
{
string nestedName = Marshal.PtrToStringBSTR(names[i]);
baseType = baseType.GetNestedType(nestedName, BindingFlags.Public | BindingFlags.NonPublic);
if (baseType == null)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), fullTypeName));
}
}
else
{
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), fullTypeName));
}
if (argCount != 0)
{
GCHandle gch = GCHandle.Alloc(args, GCHandleType.Pinned);
argCount = typeNameInfo.GetTypeArguments(argCount, gch.AddrOfPinnedObject());
gch.Free();
Type[] typeArgs = new Type[argCount];
for (int i = 0; i < argCount; i++)
{
typeArgs[i] = LoadTypeWithPartialName((ITypeName)Marshal.GetObjectForIUnknown(args[i]), null, fullTypeName);
}
return baseType.MakeGenericType(typeArgs);
}
else
{
return baseType;
}
}
finally
{
for (int i = 0; i < names.Length; i++)
{
if (names[i] != null)
{
Marshal.FreeBSTR(names[i]);
}
}
for (int i = 0; i < args.Length; i++)
{
if (args[i] != null)
{
Marshal.Release(args[i]);
}
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: TypeName
**
**
** Purpose: Provides some static methods to aid with type loading
** when LoadWithPartialName is used with generics.
**
**
============================================================*/
namespace System.Runtime.Serialization {
using System;
using System.Reflection;
using System.Globalization;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
class TypeName
{
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), TypeLibType((short)0x100), Guid("B81FF171-20F3-11D2-8DCC-00A0C9B00522")]
internal interface ITypeName
{
uint GetNameCount();
uint GetNames([In] uint count, IntPtr rgbszNamesArray);
uint GetTypeArgumentCount();
uint GetTypeArguments([In] uint count, IntPtr rgpArgumentsArray);
uint GetModifierLength();
uint GetModifiers([In] uint count, out uint rgModifiers);
[return: MarshalAs(UnmanagedType.BStr)]
string GetAssemblyName();
}
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), TypeLibType((short)0x100), Guid("B81FF171-20F3-11D2-8DCC-00A0C9B00521")]
internal interface ITypeNameFactory
{
[return: MarshalAs(UnmanagedType.Interface)]
ITypeName ParseTypeName([In, MarshalAs(UnmanagedType.LPWStr)] string szName, out int pError);
}
private TypeName()
{
}
internal static Type GetType(Assembly initialAssembly, string fullTypeName)
{
Type comType = Type.GetTypeFromCLSID(new Guid(0xB81FF171, 0x20F3, 0x11d2, 0x8d, 0xcc, 0x00, 0xa0, 0xc9, 0xb0, 0x05, 0x25));
ITypeNameFactory parser = (ITypeNameFactory)Activator.CreateInstance(comType);
int error;
ITypeName typeNameInfo = parser.ParseTypeName(fullTypeName, out error);
Type t = null;
if (error == -1)
{
t = LoadTypeWithPartialName(typeNameInfo, initialAssembly, fullTypeName);
}
return t;
}
static Type LoadTypeWithPartialName(ITypeName typeNameInfo, Assembly initialAssembly, string fullTypeName)
{
uint nameCount = typeNameInfo.GetNameCount();
uint argCount = typeNameInfo.GetTypeArgumentCount();
IntPtr[] names = new IntPtr[nameCount];
IntPtr[] args = new IntPtr[argCount];
try
{
Type baseType = null;
if (nameCount != 0)
{
GCHandle gch = GCHandle.Alloc(names, GCHandleType.Pinned);
nameCount = typeNameInfo.GetNames(nameCount, gch.AddrOfPinnedObject());
gch.Free();
string name = Marshal.PtrToStringBSTR(names[0]);
string asmName = typeNameInfo.GetAssemblyName();
if (!String.IsNullOrEmpty(asmName))
{
Assembly asm = Assembly.LoadWithPartialName(asmName);
if (asm == null)
{
asm = Assembly.LoadWithPartialName(new AssemblyName(asmName).Name);
}
baseType = asm.GetType(name);
}
else
{
if (initialAssembly != null)
{
baseType = initialAssembly.GetType(name);
}
else
baseType = Type.GetType(name);
}
if (baseType == null)
{
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), fullTypeName));
}
for (int i = 1; i < nameCount; i++)
{
string nestedName = Marshal.PtrToStringBSTR(names[i]);
baseType = baseType.GetNestedType(nestedName, BindingFlags.Public | BindingFlags.NonPublic);
if (baseType == null)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), fullTypeName));
}
}
else
{
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), fullTypeName));
}
if (argCount != 0)
{
GCHandle gch = GCHandle.Alloc(args, GCHandleType.Pinned);
argCount = typeNameInfo.GetTypeArguments(argCount, gch.AddrOfPinnedObject());
gch.Free();
Type[] typeArgs = new Type[argCount];
for (int i = 0; i < argCount; i++)
{
typeArgs[i] = LoadTypeWithPartialName((ITypeName)Marshal.GetObjectForIUnknown(args[i]), null, fullTypeName);
}
return baseType.MakeGenericType(typeArgs);
}
else
{
return baseType;
}
}
finally
{
for (int i = 0; i < names.Length; i++)
{
if (names[i] != null)
{
Marshal.FreeBSTR(names[i]);
}
}
for (int i = 0; i < args.Length; i++)
{
if (args[i] != null)
{
Marshal.Release(args[i]);
}
}
}
}
}
}
// 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
- ProcessThread.cs
- GenericEnumConverter.cs
- BitmapPalette.cs
- GroupAggregateExpr.cs
- _LoggingObject.cs
- SplineKeyFrames.cs
- ObjectAnimationBase.cs
- _AcceptOverlappedAsyncResult.cs
- ValidatorCompatibilityHelper.cs
- PropertyInformationCollection.cs
- OdbcUtils.cs
- StyleSheet.cs
- TransferRequestHandler.cs
- PackageStore.cs
- ZoneIdentityPermission.cs
- ListViewUpdatedEventArgs.cs
- ChtmlTextWriter.cs
- DesignTimeVisibleAttribute.cs
- ConcurrentQueue.cs
- ObjectStorage.cs
- ServiceModelActivationSectionGroup.cs
- shaperfactoryquerycacheentry.cs
- AddingNewEventArgs.cs
- RequestCacheManager.cs
- TableRow.cs
- TablePattern.cs
- contentDescriptor.cs
- EventLogger.cs
- HttpApplicationFactory.cs
- DataTablePropertyDescriptor.cs
- DocumentXmlWriter.cs
- AssociationSetMetadata.cs
- MenuItemStyle.cs
- HttpContextServiceHost.cs
- MappingModelBuildProvider.cs
- LocationSectionRecord.cs
- ProfileGroupSettingsCollection.cs
- COM2PropertyPageUITypeConverter.cs
- EmptyEnumerable.cs
- TaskFormBase.cs
- ProfileSection.cs
- WebProxyScriptElement.cs
- TemplateBamlRecordReader.cs
- Vector3DConverter.cs
- CatalogZone.cs
- NullableDoubleMinMaxAggregationOperator.cs
- Unit.cs
- UriExt.cs
- DependencyPropertyConverter.cs
- EnlistmentState.cs
- SchemaObjectWriter.cs
- Item.cs
- DoubleLinkList.cs
- WebPartZone.cs
- SizeAnimation.cs
- InlinedLocationReference.cs
- VoiceSynthesis.cs
- DataGridState.cs
- BindingMemberInfo.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- CommandBinding.cs
- XmlCodeExporter.cs
- EventLogInformation.cs
- FontDialog.cs
- XmlAutoDetectWriter.cs
- GeneralTransformCollection.cs
- Animatable.cs
- MetadataCache.cs
- DialogResultConverter.cs
- DuplicateWaitObjectException.cs
- RepeatInfo.cs
- EntityContainerEmitter.cs
- BaseDataList.cs
- LicenseContext.cs
- ObjectViewFactory.cs
- AuthenticationManager.cs
- TextRunCache.cs
- ResolveCriteriaApril2005.cs
- TextBoxAutomationPeer.cs
- DataGridColumn.cs
- ClientTarget.cs
- ToolboxItemFilterAttribute.cs
- TextLine.cs
- WorkflowTerminatedException.cs
- DeflateStream.cs
- HttpServerUtilityBase.cs
- entityreference_tresulttype.cs
- LingerOption.cs
- XPathParser.cs
- CultureInfoConverter.cs
- CollectionChangeEventArgs.cs
- AutomationProperties.cs
- OdbcConnectionStringbuilder.cs
- WebEvents.cs
- GregorianCalendar.cs
- AssemblyNameUtility.cs
- IgnoreDeviceFilterElement.cs
- Transaction.cs
- HtmlFormWrapper.cs
- InProcStateClientManager.cs