当前位置: 首页>>代码示例>>C#>>正文


C# Module.GetBlob方法代码示例

本文整理汇总了C#中IKVM.Reflection.Module.GetBlob方法的典型用法代码示例。如果您正苦于以下问题:C# Module.GetBlob方法的具体用法?C# Module.GetBlob怎么用?C# Module.GetBlob使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IKVM.Reflection.Module的用法示例。


在下文中一共展示了Module.GetBlob方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ReadFieldMarshal

		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;
		}
开发者ID:JokerMisfits,项目名称:linux-packaging-mono,代码行数:76,代码来源:MarshalSpec.cs

示例2: GetMarshalAsAttribute

		internal static CustomAttributeData GetMarshalAsAttribute(Module module, int token)
		{
			// TODO use binary search?
			for (int i = 0; i < module.FieldMarshal.records.Length; i++)
			{
				if (module.FieldMarshal.records[i].Parent == token)
				{
					ByteReader blob = module.GetBlob(module.FieldMarshal.records[i].NativeType);
					UnmanagedType unmanagedType = (UnmanagedType)blob.ReadCompressedInt();
					UnmanagedType? arraySubType = null;
					short? sizeParamIndex = null;
					int? sizeConst = null;
					VarEnum? safeArraySubType = null;
					Type safeArrayUserDefinedSubType = null;
					int? iidParameterIndex = null;
					string marshalType = null;
					string marshalCookie = null;
					Type marshalTypeRef = null;
					if (unmanagedType == UnmanagedType.LPArray)
					{
						arraySubType = (UnmanagedType)blob.ReadCompressedInt();
						if (arraySubType == NATIVE_TYPE_MAX)
						{
							arraySubType = null;
						}
						if (blob.Length != 0)
						{
							sizeParamIndex = (short)blob.ReadCompressedInt();
							if (blob.Length != 0)
							{
								sizeConst = blob.ReadCompressedInt();
								if (blob.Length != 0 && blob.ReadCompressedInt() == 0)
								{
									sizeParamIndex = null;
								}
							}
						}
					}
					else if (unmanagedType == UnmanagedType.SafeArray)
					{
						if (blob.Length != 0)
						{
							safeArraySubType = (VarEnum)blob.ReadCompressedInt();
							if (blob.Length != 0)
							{
								safeArrayUserDefinedSubType = ReadType(module, blob);
							}
						}
					}
					else if (unmanagedType == UnmanagedType.ByValArray)
					{
						sizeConst = blob.ReadCompressedInt();
						if (blob.Length != 0)
						{
							arraySubType = (UnmanagedType)blob.ReadCompressedInt();
						}
					}
					else if (unmanagedType == UnmanagedType.ByValTStr)
					{
						sizeConst = blob.ReadCompressedInt();
					}
					else if (unmanagedType == UnmanagedType.Interface
						|| unmanagedType == UnmanagedType.IDispatch
						|| unmanagedType == UnmanagedType.IUnknown)
					{
						if (blob.Length != 0)
						{
							iidParameterIndex = blob.ReadCompressedInt();
						}
					}
					else if (unmanagedType == UnmanagedType.CustomMarshaler)
					{
						blob.ReadCompressedInt();
						blob.ReadCompressedInt();
						marshalType = ReadString(blob);
						marshalCookie = ReadString(blob);
						marshalTypeRef = module.Assembly.GetType(marshalType) ?? module.universe.GetType(marshalType);
					}

					Type typeofMarshalAs = module.universe.System_Runtime_InteropServices_MarshalAsAttribute;
					Type typeofUnmanagedType = module.universe.System_Runtime_InteropServices_UnmanagedType;
					Type typeofVarEnum = module.universe.System_Runtime_InteropServices_VarEnum;
					Type typeofType = module.universe.System_Type;
					List<CustomAttributeNamedArgument> named = new List<CustomAttributeNamedArgument>();
					if (arraySubType != null)
					{
						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("ArraySubType"), new CustomAttributeTypedArgument(typeofUnmanagedType, arraySubType.Value)));
					}
					if (sizeParamIndex != null)
					{
						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SizeParamIndex"), new CustomAttributeTypedArgument(module.universe.System_Int16, sizeParamIndex.Value)));
					}
					if (sizeConst != null)
					{
						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SizeConst"), new CustomAttributeTypedArgument(module.universe.System_Int32, sizeConst.Value)));
					}
					if (safeArraySubType != null)
					{
						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SafeArraySubType"), new CustomAttributeTypedArgument(typeofVarEnum, safeArraySubType.Value)));
					}
//.........这里部分代码省略.........
开发者ID:koush,项目名称:mono,代码行数:101,代码来源:MarshalSpec.cs

示例3: ReadDeclarativeSecurity

		internal static void ReadDeclarativeSecurity(Module module, int index, List<CustomAttributeData> list)
		{
			Universe u = module.universe;
			Assembly asm = module.Assembly;
			int action = module.DeclSecurity.records[index].Action;
			ByteReader br = module.GetBlob(module.DeclSecurity.records[index].PermissionSet);
			if (br.PeekByte() == '.')
			{
				br.ReadByte();
				int count = br.ReadCompressedUInt();
				for (int j = 0; j < count; j++)
				{
					Type type = ReadType(module, br);
					ConstructorInfo constructor = type.GetPseudoCustomAttributeConstructor(u.System_Security_Permissions_SecurityAction);
					// LAMESPEC there is an additional length here (probably of the named argument list)
					byte[] blob = br.ReadBytes(br.ReadCompressedUInt());
					list.Add(new CustomAttributeData(asm, constructor, action, blob, index));
				}
			}
			else
			{
				// .NET 1.x format (xml)
				char[] buf = new char[br.Length / 2];
				for (int i = 0; i < buf.Length; i++)
				{
					buf[i] = br.ReadChar();
				}
				string xml = new String(buf);
				ConstructorInfo constructor = u.System_Security_Permissions_PermissionSetAttribute.GetPseudoCustomAttributeConstructor(u.System_Security_Permissions_SecurityAction);
				List<CustomAttributeNamedArgument> args = new List<CustomAttributeNamedArgument>();
				args.Add(new CustomAttributeNamedArgument(GetProperty(null, u.System_Security_Permissions_PermissionSetAttribute, "XML", u.System_String),
					new CustomAttributeTypedArgument(u.System_String, xml)));
				list.Add(new CustomAttributeData(asm.ManifestModule, constructor, new object[] { action }, args));
			}
		}
开发者ID:JokerMisfits,项目名称:linux-packaging-mono,代码行数:35,代码来源:CustomAttributeData.cs

示例4: GetMarshalAsAttribute

		internal static CustomAttributeData GetMarshalAsAttribute(Module module, int token)
		{
			foreach (int i in module.FieldMarshal.Filter(token))
			{
				ByteReader blob = module.GetBlob(module.FieldMarshal.records[i].NativeType);
				UnmanagedType unmanagedType = (UnmanagedType)blob.ReadCompressedInt();
				UnmanagedType? arraySubType = null;
				short? sizeParamIndex = null;
				int? sizeConst = null;
				VarEnum? safeArraySubType = null;
				Type safeArrayUserDefinedSubType = null;
				int? iidParameterIndex = null;
				string marshalType = null;
				string marshalCookie = null;
				Type marshalTypeRef = null;
				if (unmanagedType == UnmanagedType.LPArray)
				{
					arraySubType = (UnmanagedType)blob.ReadCompressedInt();
					if (arraySubType == NATIVE_TYPE_MAX)
					{
						arraySubType = null;
					}
					if (blob.Length != 0)
					{
						sizeParamIndex = (short)blob.ReadCompressedInt();
						if (blob.Length != 0)
						{
							sizeConst = blob.ReadCompressedInt();
							if (blob.Length != 0 && blob.ReadCompressedInt() == 0)
							{
								sizeParamIndex = null;
							}
						}
					}
				}
				else if (unmanagedType == UnmanagedType.SafeArray)
				{
					if (blob.Length != 0)
					{
						safeArraySubType = (VarEnum)blob.ReadCompressedInt();
						if (blob.Length != 0)
						{
							safeArrayUserDefinedSubType = ReadType(module, blob);
						}
					}
				}
				else if (unmanagedType == UnmanagedType.ByValArray)
				{
					sizeConst = blob.ReadCompressedInt();
					if (blob.Length != 0)
					{
						arraySubType = (UnmanagedType)blob.ReadCompressedInt();
					}
				}
				else if (unmanagedType == UnmanagedType.ByValTStr)
				{
					sizeConst = blob.ReadCompressedInt();
				}
				else if (unmanagedType == UnmanagedType.Interface
					|| unmanagedType == UnmanagedType.IDispatch
					|| unmanagedType == UnmanagedType.IUnknown)
				{
					if (blob.Length != 0)
					{
						iidParameterIndex = blob.ReadCompressedInt();
					}
				}
				else if (unmanagedType == UnmanagedType.CustomMarshaler)
				{
					blob.ReadCompressedInt();
					blob.ReadCompressedInt();
					marshalType = ReadString(blob);
					marshalCookie = ReadString(blob);

					TypeNameParser parser = TypeNameParser.Parse(marshalType, false);
					if (!parser.Error)
					{
						marshalTypeRef = parser.GetType(module.universe, module.Assembly, false, marshalType, false, false);
					}
				}

				Type typeofMarshalAs = module.universe.System_Runtime_InteropServices_MarshalAsAttribute;
				Type typeofUnmanagedType = module.universe.System_Runtime_InteropServices_UnmanagedType;
				Type typeofVarEnum = module.universe.System_Runtime_InteropServices_VarEnum;
				Type typeofType = module.universe.System_Type;
				List<CustomAttributeNamedArgument> named = new List<CustomAttributeNamedArgument>();
				if (arraySubType != null)
				{
					AddNamedArgument(named, typeofMarshalAs, "ArraySubType", typeofUnmanagedType, arraySubType.Value);
				}
				if (sizeParamIndex != null)
				{
					AddNamedArgument(named, typeofMarshalAs, "SizeParamIndex", module.universe.System_Int16, sizeParamIndex.Value);
				}
				if (sizeConst != null)
				{
					AddNamedArgument(named, typeofMarshalAs, "SizeConst", module.universe.System_Int32, sizeConst.Value);
				}
				if (safeArraySubType != null)
				{
//.........这里部分代码省略.........
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:101,代码来源:MarshalSpec.cs


注:本文中的IKVM.Reflection.Module.GetBlob方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。