// note that context is slightly different from the calling assembly (System.Type.GetType), // because context is passed to the AssemblyResolve event as the RequestingAssembly public Type GetType(Assembly context, string assemblyQualifiedTypeName, bool throwOnError, bool ignoreCase) { TypeNameParser parser = TypeNameParser.Parse(assemblyQualifiedTypeName, throwOnError); if (parser.Error) { return(null); } return(parser.GetType(this, context == null ? null : context.ManifestModule, throwOnError, assemblyQualifiedTypeName, false, ignoreCase)); }
// this is similar to GetType(Assembly context, string assemblyQualifiedTypeName, bool throwOnError), // but instead it assumes that the type must exist (i.e. if EnableMissingMemberResolution is enabled // it will create a missing type) public Type ResolveType(Assembly context, string assemblyQualifiedTypeName) { TypeNameParser parser = TypeNameParser.Parse(assemblyQualifiedTypeName, false); if (parser.Error) { return(null); } return(parser.GetType(this, context == null ? null : context.ManifestModule, false, assemblyQualifiedTypeName, true, false)); }
internal static bool ReadFieldMarshal(Module module, int token, out FieldMarshal fm) { fm = new FieldMarshal(); foreach (int i in module.FieldMarshal.Filter(token)) { ByteReader blob = module.GetBlob(module.FieldMarshal.records[i].NativeType); fm.UnmanagedType = (UnmanagedType)blob.ReadCompressedUInt(); if (fm.UnmanagedType == UnmanagedType.LPArray) { fm.ArraySubType = (UnmanagedType)blob.ReadCompressedUInt(); if (fm.ArraySubType == NATIVE_TYPE_MAX) { fm.ArraySubType = null; } if (blob.Length != 0) { fm.SizeParamIndex = (short)blob.ReadCompressedUInt(); if (blob.Length != 0) { fm.SizeConst = blob.ReadCompressedUInt(); if (blob.Length != 0 && blob.ReadCompressedUInt() == 0) { fm.SizeParamIndex = null; } } } } else if (fm.UnmanagedType == UnmanagedType.SafeArray) { if (blob.Length != 0) { fm.SafeArraySubType = (VarEnum)blob.ReadCompressedUInt(); if (blob.Length != 0) { fm.SafeArrayUserDefinedSubType = ReadType(module, blob); } } } else if (fm.UnmanagedType == UnmanagedType.ByValArray) { fm.SizeConst = blob.ReadCompressedUInt(); if (blob.Length != 0) { fm.ArraySubType = (UnmanagedType)blob.ReadCompressedUInt(); } } else if (fm.UnmanagedType == UnmanagedType.ByValTStr) { fm.SizeConst = blob.ReadCompressedUInt(); } else if (fm.UnmanagedType == UnmanagedType.Interface || fm.UnmanagedType == UnmanagedType.IDispatch || fm.UnmanagedType == UnmanagedType.IUnknown) { if (blob.Length != 0) { fm.IidParameterIndex = blob.ReadCompressedUInt(); } } else if (fm.UnmanagedType == UnmanagedType_CustomMarshaler) { blob.ReadCompressedUInt(); blob.ReadCompressedUInt(); fm.MarshalType = ReadString(blob); fm.MarshalCookie = ReadString(blob); TypeNameParser parser = TypeNameParser.Parse(fm.MarshalType, false); if (!parser.Error) { fm.MarshalTypeRef = parser.GetType(module.universe, module, false, fm.MarshalType, false, false); } } return(true); } return(false); }