Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Runtime / Serialization / TypeName.cs / 1 / 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
- AsyncMethodInvoker.cs
- HttpListener.cs
- mediaeventargs.cs
- ReadOnlyPermissionSet.cs
- ListViewInsertionMark.cs
- PageOrientation.cs
- SqlDependencyListener.cs
- SystemDiagnosticsSection.cs
- MetafileEditor.cs
- ParameterElement.cs
- InlineCategoriesDocument.cs
- Ref.cs
- MetadataWorkspace.cs
- BitmapScalingModeValidation.cs
- SoapExtensionTypeElement.cs
- NameTable.cs
- DictionaryBase.cs
- ZipIOCentralDirectoryBlock.cs
- LinqDataSourceDeleteEventArgs.cs
- XmlILOptimizerVisitor.cs
- XmlBoundElement.cs
- AssemblySettingAttributes.cs
- CopyAttributesAction.cs
- Constants.cs
- SqlDataSourceCache.cs
- IsolatedStorageException.cs
- SharedUtils.cs
- formatstringdialog.cs
- WindowsRichEditRange.cs
- PhysicalFontFamily.cs
- ClientTargetSection.cs
- CallbackValidatorAttribute.cs
- CryptoKeySecurity.cs
- ConnectionsZoneDesigner.cs
- ObjectConverter.cs
- MergeFailedEvent.cs
- DefaultValueTypeConverter.cs
- MatrixTransform3D.cs
- GridViewUpdatedEventArgs.cs
- HScrollProperties.cs
- GeometryHitTestResult.cs
- ChannelTraceRecord.cs
- SqlInfoMessageEvent.cs
- InputScopeNameConverter.cs
- ListBox.cs
- ToolStrip.cs
- TemplateNameScope.cs
- HtmlTextBoxAdapter.cs
- TableSectionStyle.cs
- OutputCacheModule.cs
- EventLogPermissionEntry.cs
- AttributeSetAction.cs
- ConnectionStringsExpressionEditor.cs
- EventSetter.cs
- SmtpReplyReaderFactory.cs
- input.cs
- BooleanAnimationUsingKeyFrames.cs
- Reference.cs
- XmlNotation.cs
- TransactionScope.cs
- PriorityQueue.cs
- ParentUndoUnit.cs
- Random.cs
- VarInfo.cs
- HttpResponseHeader.cs
- CredentialCache.cs
- AsyncWaitHandle.cs
- DateRangeEvent.cs
- Resources.Designer.cs
- ExtenderControl.cs
- ActivityExecutorDelegateInfo.cs
- WindowsListViewGroup.cs
- HttpListenerRequestUriBuilder.cs
- HashHelpers.cs
- TableChangeProcessor.cs
- SpecialNameAttribute.cs
- PngBitmapDecoder.cs
- SQLStringStorage.cs
- OutputCacheModule.cs
- XPathException.cs
- DescendentsWalkerBase.cs
- ProvidersHelper.cs
- DataColumnMappingCollection.cs
- FormViewPageEventArgs.cs
- DataGridViewCellEventArgs.cs
- MediaPlayer.cs
- SerialPinChanges.cs
- DelegateSerializationHolder.cs
- MouseOverProperty.cs
- UpdateRecord.cs
- Debugger.cs
- GridViewCommandEventArgs.cs
- AnnotationMap.cs
- ScaleTransform.cs
- StringPropertyBuilder.cs
- CodeIdentifiers.cs
- FragmentQueryProcessor.cs
- ReceiveContextCollection.cs
- ValidatingCollection.cs
- Matrix.cs