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
- ISAPIApplicationHost.cs
- PlainXmlDeserializer.cs
- TextEditorTyping.cs
- UInt16Storage.cs
- OletxEnlistment.cs
- Tile.cs
- ThousandthOfEmRealDoubles.cs
- HttpApplicationFactory.cs
- AspNetHostingPermission.cs
- Timer.cs
- BuildTopDownAttribute.cs
- ConstNode.cs
- TagMapCollection.cs
- XmlSchemaComplexContent.cs
- MetabaseReader.cs
- DataServiceQuery.cs
- ItemsPanelTemplate.cs
- TreeNodeCollectionEditor.cs
- DateRangeEvent.cs
- PanelContainerDesigner.cs
- SizeConverter.cs
- DocumentEventArgs.cs
- PathFigure.cs
- Rfc2898DeriveBytes.cs
- EmissiveMaterial.cs
- FixedPosition.cs
- Predicate.cs
- SelectQueryOperator.cs
- CharEnumerator.cs
- ExportOptions.cs
- QueryOutputWriter.cs
- EntityDataSourceViewSchema.cs
- ObjectTag.cs
- CurrentTimeZone.cs
- OutputCacheModule.cs
- DataShape.cs
- DataGridViewTextBoxColumn.cs
- Mappings.cs
- Message.cs
- UnitySerializationHolder.cs
- SoapClientMessage.cs
- GrammarBuilderPhrase.cs
- SiteOfOriginContainer.cs
- Stacktrace.cs
- SelectionProcessor.cs
- FindCriteriaElement.cs
- WpfKnownTypeInvoker.cs
- AutoResetEvent.cs
- ValueSerializer.cs
- ChangeProcessor.cs
- UIElement.cs
- ArcSegment.cs
- TextShapeableCharacters.cs
- ListViewUpdateEventArgs.cs
- TypeDelegator.cs
- ControlCachePolicy.cs
- RelatedView.cs
- HandlerBase.cs
- ImageListStreamer.cs
- ScriptRef.cs
- Geometry.cs
- OdbcEnvironment.cs
- EntityDataSourceChangingEventArgs.cs
- Single.cs
- SchemaImporterExtensionElement.cs
- Rules.cs
- StateElement.cs
- RewritingValidator.cs
- GifBitmapDecoder.cs
- COM2ExtendedTypeConverter.cs
- Environment.cs
- LockCookie.cs
- RenderDataDrawingContext.cs
- CommandBindingCollection.cs
- HttpFormatExtensions.cs
- WebExceptionStatus.cs
- MenuBindingsEditor.cs
- DataGridViewColumnCollectionEditor.cs
- DataServiceRequest.cs
- UrlMapping.cs
- MatrixTransform3D.cs
- DecoderExceptionFallback.cs
- Application.cs
- ItemsChangedEventArgs.cs
- GeometryCollection.cs
- JsonDataContract.cs
- TextHidden.cs
- ListBoxDesigner.cs
- RoleGroupCollection.cs
- FamilyCollection.cs
- SoapFault.cs
- TypedTableBase.cs
- StoreItemCollection.Loader.cs
- XmlReflectionImporter.cs
- OracleMonthSpan.cs
- Exceptions.cs
- RemoteWebConfigurationHostStream.cs
- CardSpaceShim.cs
- HybridDictionary.cs
- FileVersionInfo.cs