Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Runtime / Serialization / TypeName.cs / 3 / 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
- HttpApplicationFactory.cs
- ArcSegment.cs
- ImageMapEventArgs.cs
- UiaCoreTypesApi.cs
- HttpListenerRequestTraceRecord.cs
- PersonalizableAttribute.cs
- IncrementalHitTester.cs
- _AutoWebProxyScriptWrapper.cs
- SmiMetaData.cs
- EntityDataSourceContainerNameItem.cs
- ColorContextHelper.cs
- DirectionalAction.cs
- ImageUrlEditor.cs
- IUnknownConstantAttribute.cs
- Setter.cs
- GridView.cs
- SortedList.cs
- VisualStyleElement.cs
- CanonicalFormWriter.cs
- WebResourceAttribute.cs
- WebCategoryAttribute.cs
- XsltException.cs
- documentsequencetextcontainer.cs
- Root.cs
- ProcessModelInfo.cs
- DataSysAttribute.cs
- ToolStripActionList.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- SchemaNamespaceManager.cs
- ScriptingJsonSerializationSection.cs
- GridViewCellAutomationPeer.cs
- ReadOnlyCollection.cs
- DataExpression.cs
- ListViewSelectEventArgs.cs
- XmlnsPrefixAttribute.cs
- DBConnection.cs
- CompilerErrorCollection.cs
- FontFamily.cs
- RelationshipEnd.cs
- TextRangeBase.cs
- TextEncodedRawTextWriter.cs
- TableLayoutColumnStyleCollection.cs
- precedingsibling.cs
- Invariant.cs
- BufferedGraphicsContext.cs
- MethodRental.cs
- UidManager.cs
- UnsafeNativeMethods.cs
- MissingManifestResourceException.cs
- EventArgs.cs
- ToolStripArrowRenderEventArgs.cs
- ToolConsole.cs
- ListenerAdaptersInstallComponent.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- NativeMethods.cs
- TypeConverter.cs
- MetadataCacheItem.cs
- AddressHeaderCollection.cs
- XmlArrayItemAttributes.cs
- ContextStaticAttribute.cs
- newitemfactory.cs
- OverflowException.cs
- MultipleViewPattern.cs
- SqlDataRecord.cs
- HtmlLink.cs
- ControlDesigner.cs
- Shape.cs
- DataGrid.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- Imaging.cs
- HtmlElement.cs
- GeneralTransform3DTo2DTo3D.cs
- DrawListViewSubItemEventArgs.cs
- ReadOnlyPropertyMetadata.cs
- DeploymentSection.cs
- RuntimeWrappedException.cs
- PhoneCall.cs
- ViewStateModeByIdAttribute.cs
- InheritanceService.cs
- SoapIncludeAttribute.cs
- MDIClient.cs
- HandleTable.cs
- TransformValueSerializer.cs
- TriggerBase.cs
- TextEditorThreadLocalStore.cs
- ExpressionStringBuilder.cs
- MessageDroppedTraceRecord.cs
- FixedHighlight.cs
- VSDExceptions.cs
- EntityDataSourceMemberPath.cs
- InputLanguageCollection.cs
- MethodBuilderInstantiation.cs
- EntityClientCacheKey.cs
- DataRecord.cs
- XNodeNavigator.cs
- ProtocolViolationException.cs
- ZoneIdentityPermission.cs
- Lock.cs
- DBConnectionString.cs
- XmlSchemaExporter.cs