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
- FontNamesConverter.cs
- BCryptHashAlgorithm.cs
- Permission.cs
- CapabilitiesUse.cs
- SerializerProvider.cs
- SafeLibraryHandle.cs
- InputChannelBinder.cs
- Utilities.cs
- TrustSection.cs
- FlowSwitchDesigner.xaml.cs
- SafeIUnknown.cs
- MediaTimeline.cs
- XmlEncoding.cs
- XamlPointCollectionSerializer.cs
- DiscardableAttribute.cs
- RestClientProxyHandler.cs
- ColumnMapTranslator.cs
- HttpListenerException.cs
- validationstate.cs
- ResXBuildProvider.cs
- XmlRootAttribute.cs
- SerialStream.cs
- TcpHostedTransportConfiguration.cs
- IUnknownConstantAttribute.cs
- DataSourceConverter.cs
- DataObjectAttribute.cs
- OptimizerPatterns.cs
- EpmTargetPathSegment.cs
- TemplateField.cs
- StylusPlugInCollection.cs
- XmlUtil.cs
- ConfigurationElementCollection.cs
- RegisteredArrayDeclaration.cs
- BindingExpression.cs
- SizeValueSerializer.cs
- ThreadStaticAttribute.cs
- WinFormsSecurity.cs
- Main.cs
- ComponentResourceKey.cs
- UpWmlPageAdapter.cs
- BinaryMethodMessage.cs
- XmlNodeList.cs
- FilterRepeater.cs
- InternalsVisibleToAttribute.cs
- UpdatePanel.cs
- BrowsableAttribute.cs
- XhtmlBasicTextBoxAdapter.cs
- RootBrowserWindowProxy.cs
- CodeMemberField.cs
- OLEDB_Util.cs
- UpdatableGenericsFeature.cs
- AssemblyNameProxy.cs
- DocumentGridContextMenu.cs
- SmtpClient.cs
- PerformanceCounterCategory.cs
- LocalizabilityAttribute.cs
- WorkflowDesignerColors.cs
- TrackingAnnotationCollection.cs
- OleDbStruct.cs
- AllMembershipCondition.cs
- SystemIPInterfaceProperties.cs
- ListCollectionView.cs
- GC.cs
- BufferModesCollection.cs
- EventDescriptor.cs
- IndicShape.cs
- StaticContext.cs
- HexParser.cs
- SqlDataSourceView.cs
- DataList.cs
- ResXDataNode.cs
- BaseTemplateBuildProvider.cs
- PagesChangedEventArgs.cs
- Style.cs
- FrameworkElement.cs
- BitmapEffectrendercontext.cs
- BitmapEncoder.cs
- BitmapCache.cs
- WebPartConnection.cs
- URI.cs
- BaseDataListPage.cs
- ZoneIdentityPermission.cs
- ThrowHelper.cs
- WorkerRequest.cs
- XmlAttributeOverrides.cs
- MulticastOption.cs
- PerspectiveCamera.cs
- ConfigXmlComment.cs
- WebBrowserHelper.cs
- Page.cs
- MultiSelector.cs
- DiscreteKeyFrames.cs
- ComplexType.cs
- HyperLink.cs
- XmlSchemaCompilationSettings.cs
- FilterRepeater.cs
- DataBindingHandlerAttribute.cs
- Relationship.cs
- _LoggingObject.cs
- DefaultWorkflowTransactionService.cs