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
- OutputCacheProfile.cs
- CultureInfo.cs
- WebPermission.cs
- LinqDataSourceUpdateEventArgs.cs
- SortDescription.cs
- TraceFilter.cs
- ModelFunctionTypeElement.cs
- Stylus.cs
- CodeTypeReferenceExpression.cs
- Util.cs
- TileBrush.cs
- SerialPort.cs
- ExplicitDiscriminatorMap.cs
- TextEditorTyping.cs
- LineServicesCallbacks.cs
- InitializationEventAttribute.cs
- ObjectConverter.cs
- ScriptingProfileServiceSection.cs
- RenderTargetBitmap.cs
- metadatamappinghashervisitor.cs
- PointConverter.cs
- ContentPlaceHolder.cs
- EntitySqlQueryCacheEntry.cs
- TabletCollection.cs
- SmiEventSink_Default.cs
- LoginUtil.cs
- WebBrowserProgressChangedEventHandler.cs
- WeakReference.cs
- ZipIOExtraFieldPaddingElement.cs
- LifetimeServices.cs
- LabelEditEvent.cs
- XmlILAnnotation.cs
- Point4D.cs
- WebPartConnectionsConnectVerb.cs
- CompoundFileDeflateTransform.cs
- Ppl.cs
- ConcurrentQueue.cs
- Validator.cs
- ElementNotEnabledException.cs
- UTF7Encoding.cs
- LinqDataSourceContextData.cs
- _SafeNetHandles.cs
- DataGridAddNewRow.cs
- SendActivity.cs
- QueryAccessibilityHelpEvent.cs
- ListViewGroupConverter.cs
- Terminate.cs
- ResourceReader.cs
- XmlDataImplementation.cs
- VirtualPathUtility.cs
- NotifyInputEventArgs.cs
- Int32.cs
- Page.cs
- DecoderFallbackWithFailureFlag.cs
- PrimitiveRenderer.cs
- BoundColumn.cs
- XPathDocument.cs
- CodeDOMProvider.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- iisPickupDirectory.cs
- MenuItem.cs
- OperationFormatStyle.cs
- KnownTypes.cs
- TreeNodeClickEventArgs.cs
- RectangleHotSpot.cs
- BindingContext.cs
- ApplicationProxyInternal.cs
- PreservationFileReader.cs
- ObsoleteAttribute.cs
- Content.cs
- StandardBindingElementCollection.cs
- DoubleMinMaxAggregationOperator.cs
- XPathBinder.cs
- CookieHandler.cs
- SqlServices.cs
- WebPartTracker.cs
- FontWeightConverter.cs
- NetworkStream.cs
- WindowsSecurityTokenAuthenticator.cs
- WebPartDescription.cs
- AttributeEmitter.cs
- AsyncResult.cs
- TimersDescriptionAttribute.cs
- HtmlPhoneCallAdapter.cs
- _CacheStreams.cs
- RectangleConverter.cs
- BaseContextMenu.cs
- DropTarget.cs
- ProvidersHelper.cs
- PagesChangedEventArgs.cs
- _SSPIWrapper.cs
- CompositeFontParser.cs
- ExpressionConverter.cs
- StrongNameKeyPair.cs
- TypedReference.cs
- HtmlControlPersistable.cs
- UnsafeNativeMethods.cs
- ListViewItem.cs
- Compensate.cs
- XmlElement.cs