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
- LineGeometry.cs
- Int32Converter.cs
- XXXOnTypeBuilderInstantiation.cs
- DataObjectEventArgs.cs
- Convert.cs
- HostSecurityManager.cs
- WebExceptionStatus.cs
- MetabaseSettings.cs
- BitmapEffectState.cs
- SizeAnimation.cs
- SoapSchemaExporter.cs
- BooleanSwitch.cs
- CodeSubDirectory.cs
- ItemMap.cs
- StandardToolWindows.cs
- ThaiBuddhistCalendar.cs
- odbcmetadatafactory.cs
- Bidi.cs
- GPPOINTF.cs
- DataGridPagerStyle.cs
- SecurityProtocolCorrelationState.cs
- ClientConfigurationSystem.cs
- InputLangChangeEvent.cs
- FileCodeGroup.cs
- TdsParserSafeHandles.cs
- ConstructorExpr.cs
- GenericUriParser.cs
- DBAsyncResult.cs
- OracleMonthSpan.cs
- SerializationTrace.cs
- NativeMethods.cs
- FactoryId.cs
- FixedBufferAttribute.cs
- SimpleHandlerBuildProvider.cs
- SqlDataSourceEnumerator.cs
- WindowsPrincipal.cs
- Hex.cs
- XmlMapping.cs
- RegistrySecurity.cs
- SQLGuid.cs
- ImageDrawing.cs
- NativeMethods.cs
- XmlExtensionFunction.cs
- GeneratedView.cs
- X509Chain.cs
- JsonDataContract.cs
- NumericPagerField.cs
- SoapProtocolReflector.cs
- ForeignKeyConstraint.cs
- Utility.cs
- XmlStringTable.cs
- UiaCoreProviderApi.cs
- FileDialog.cs
- SharedStream.cs
- HttpModulesSection.cs
- ForAllOperator.cs
- SoapEnumAttribute.cs
- TCPClient.cs
- AssemblyInfo.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- IntegrationExceptionEventArgs.cs
- FieldNameLookup.cs
- DataError.cs
- DesigntimeLicenseContext.cs
- IdentityReference.cs
- DataBinder.cs
- CanonicalXml.cs
- Canvas.cs
- ObjectViewFactory.cs
- JsonReader.cs
- ColumnClickEvent.cs
- HtmlLiteralTextAdapter.cs
- StylusPointPropertyUnit.cs
- WriteTimeStream.cs
- TemplatePropertyEntry.cs
- MILUtilities.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- SettingsPropertyCollection.cs
- ColorKeyFrameCollection.cs
- SqlStatistics.cs
- FrameAutomationPeer.cs
- ColorConverter.cs
- ReadOnlyDataSource.cs
- ToolStripSettings.cs
- ColumnMapCopier.cs
- ValidationContext.cs
- StyleSheetComponentEditor.cs
- WindowsSysHeader.cs
- MessagePropertyVariants.cs
- BuiltInExpr.cs
- System.Data_BID.cs
- StylusEventArgs.cs
- FontWeight.cs
- Debugger.cs
- Hash.cs
- ToolBar.cs
- PropertyIDSet.cs
- BlurBitmapEffect.cs
- _NetRes.cs
- CompiledXpathExpr.cs