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
- CompilationUnit.cs
- AttributeEmitter.cs
- WebRequestModulesSection.cs
- AnnotationAuthorChangedEventArgs.cs
- StreamInfo.cs
- ScriptManager.cs
- UnknownBitmapEncoder.cs
- ImageCodecInfo.cs
- LocalizationComments.cs
- ColumnHeader.cs
- X509ImageLogo.cs
- GenericUriParser.cs
- WebSysDefaultValueAttribute.cs
- XPathCompileException.cs
- VariableQuery.cs
- CSharpCodeProvider.cs
- OleDbInfoMessageEvent.cs
- SchemaObjectWriter.cs
- PropertyEmitterBase.cs
- SafeCryptoHandles.cs
- CacheChildrenQuery.cs
- DataGridDetailsPresenterAutomationPeer.cs
- Stroke2.cs
- ProfileManager.cs
- GenericEnumerator.cs
- RichTextBox.cs
- HasActivatableWorkflowEvent.cs
- InstanceBehavior.cs
- HttpRuntime.cs
- XmlSiteMapProvider.cs
- TextRange.cs
- CharAnimationBase.cs
- BitmapEffectDrawingContextWalker.cs
- Stream.cs
- SwitchCase.cs
- WebPartDisplayModeCancelEventArgs.cs
- WindowsGrip.cs
- SQLDecimalStorage.cs
- ZoneMembershipCondition.cs
- BaseServiceProvider.cs
- DesignUtil.cs
- DocumentSequenceHighlightLayer.cs
- Menu.cs
- ZipQueryOperator.cs
- OperationPickerDialog.designer.cs
- oledbmetadatacollectionnames.cs
- BasePropertyDescriptor.cs
- StorageFunctionMapping.cs
- sqlnorm.cs
- commandenforcer.cs
- DoubleLink.cs
- DecimalStorage.cs
- Link.cs
- DiscreteKeyFrames.cs
- SerializationFieldInfo.cs
- ProxyDataContractResolver.cs
- CallbackHandler.cs
- ListViewGroupItemCollection.cs
- BigInt.cs
- WebPartDisplayModeEventArgs.cs
- DocumentXPathNavigator.cs
- DataControlButton.cs
- CopyOnWriteList.cs
- AuthorizationRuleCollection.cs
- IEnumerable.cs
- FormViewInsertEventArgs.cs
- DateTimeFormatInfoScanner.cs
- CodeTypeMemberCollection.cs
- DisplayInformation.cs
- WsatStrings.cs
- RequestReplyCorrelator.cs
- PropertyMappingExceptionEventArgs.cs
- ActivityScheduledQuery.cs
- VerticalAlignConverter.cs
- SqlCacheDependencySection.cs
- WindowsFormsLinkLabel.cs
- CustomAssemblyResolver.cs
- SqlException.cs
- SiteMapPathDesigner.cs
- Ipv6Element.cs
- BuildProviderAppliesToAttribute.cs
- ExpandCollapsePatternIdentifiers.cs
- AstTree.cs
- ImageFormatConverter.cs
- XappLauncher.cs
- _CookieModule.cs
- StructuralObject.cs
- OptimizedTemplateContent.cs
- MapPathBasedVirtualPathProvider.cs
- CurrentChangingEventArgs.cs
- BamlStream.cs
- PenLineJoinValidation.cs
- BackStopAuthenticationModule.cs
- HebrewNumber.cs
- UpDownBaseDesigner.cs
- CrossSiteScriptingValidation.cs
- BitmapImage.cs
- streamingZipPartStream.cs
- DelegatingHeader.cs
- ItemsControlAutomationPeer.cs