本文整理汇总了C#中CustomAttributeBuilder类的典型用法代码示例。如果您正苦于以下问题:C# CustomAttributeBuilder类的具体用法?C# CustomAttributeBuilder怎么用?C# CustomAttributeBuilder使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
CustomAttributeBuilder类属于命名空间,在下文中一共展示了CustomAttributeBuilder类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.NotPublic);
MethodBuilder method = type.DefineMethod("method1", MethodAttributes.Public | MethodAttributes.Static, typeof(void), new Type[] { typeof(int) });
ParameterBuilder parameter = method.DefineParameter(1, ParameterAttributes.HasDefault, "testParam");
ILGenerator ilGenerator = method.GetILGenerator();
ilGenerator.Emit(OpCodes.Ret);
Type attributeType = typeof(ParameterBuilderCustomAttribute);
ConstructorInfo constructor = attributeType.GetConstructors()[0];
FieldInfo field = attributeType.GetField("Field12345");
CustomAttributeBuilder attribute = new CustomAttributeBuilder(constructor, new object[] { 4 }, new FieldInfo[] { field }, new object[] { "hello" });
parameter.SetCustomAttribute(attribute);
Type createdType = type.CreateTypeInfo().AsType();
MethodInfo createdMethod = createdType.GetMethod("method1");
ParameterInfo createdParameter = createdMethod.GetParameters()[0];
object[] attributes = createdParameter.GetCustomAttributes(false).ToArray();
Assert.Equal(1, attributes.Length);
ParameterBuilderCustomAttribute obj = (ParameterBuilderCustomAttribute)attributes[0];
Assert.Equal("hello", obj.Field12345);
Assert.Equal(4, obj.m_ctorType2);
}
开发者ID:ESgarbi,项目名称:corefx,代码行数:26,代码来源:SetCustomAttributeTests.cs
示例2: CanAddAttribute
public void CanAddAttribute()
{
var type = typeof (SomeClass);
AssemblyName aName = new AssemblyName("SomeNamespace");
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name);
TypeBuilder tb = mb.DefineType(type.Name, TypeAttributes.Public, type);
TypeDescriptor.AddAttributes(type);
Type[] attrCtorParams = {typeof (string)};
ConstructorInfo attrCtorInfo = typeof (DynamicAttribute).GetConstructor(attrCtorParams);
if (attrCtorInfo != null)
{
CustomAttributeBuilder attrBuilder = new CustomAttributeBuilder(attrCtorInfo, new object[] {"Some Value"});
tb.SetCustomAttribute(attrBuilder);
}
Type newType = tb.CreateType();
SomeClass instance = (SomeClass) Activator.CreateInstance(newType);
DynamicAttribute attr = (DynamicAttribute) instance.GetType().GetCustomAttributes(typeof (DynamicAttribute), false).SingleOrDefault();
Assert.AreEqual("Test", instance.Value);
Assert.IsNotNull(attr);
Assert.AreEqual(attr.Value, "Some Value");
}
开发者ID:Foxpips,项目名称:ProgrammingCSharp,代码行数:27,代码来源:DynamicAttribute.cs
示例3: SetCustomAttribute
public void SetCustomAttribute(CustomAttributeBuilder customBuilder)
{
Universe u = this.Module.universe;
if (customBuilder.Constructor.DeclaringType == u.System_Runtime_InteropServices_FieldOffsetAttribute)
{
customBuilder = customBuilder.DecodeBlob(this.Module.Assembly);
SetOffset((int)customBuilder.GetConstructorArgument(0));
}
else if (customBuilder.Constructor.DeclaringType == u.System_Runtime_InteropServices_MarshalAsAttribute)
{
MarshalSpec.SetMarshalAsAttribute(typeBuilder.ModuleBuilder, pseudoToken, customBuilder);
attribs |= FieldAttributes.HasFieldMarshal;
}
else if (customBuilder.Constructor.DeclaringType == u.System_NonSerializedAttribute)
{
attribs |= FieldAttributes.NotSerialized;
}
else if (customBuilder.Constructor.DeclaringType == u.System_Runtime_CompilerServices_SpecialNameAttribute)
{
attribs |= FieldAttributes.SpecialName;
}
else
{
typeBuilder.ModuleBuilder.SetCustomAttribute(pseudoToken, customBuilder);
}
}
开发者ID:koush,项目名称:mono,代码行数:26,代码来源:FieldBuilder.cs
示例4: SetCustomAttribute
public void SetCustomAttribute()
{
Type returnType = typeof(int);
Type[] ctorParamTypes = new Type[] { typeof(int) };
int expectedValue = 10;
object[] ctorParamValues = new object[] { expectedValue };
CustomAttributeBuilder customAttrBuilder = new CustomAttributeBuilder(typeof(IntPropertyAttribute).GetConstructor(ctorParamTypes), ctorParamValues);
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Class | TypeAttributes.Public);
PropertyBuilder property = type.DefineProperty("TestProperty", PropertyAttributes.HasDefault, returnType, null);
property.SetCustomAttribute(customAttrBuilder);
MethodAttributes getMethodAttributes = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
MethodBuilder method = type.DefineMethod("TestMethod", getMethodAttributes, returnType, new Type[0]);
ILGenerator methodILGenerator = method.GetILGenerator();
methodILGenerator.Emit(OpCodes.Ldarg_0);
methodILGenerator.Emit(OpCodes.Ret);
property.SetGetMethod(method);
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static;
Type createdType = type.CreateTypeInfo().AsType();
PropertyInfo createdProperty = createdType.GetProperty("TestProperty", bindingFlags);
object[] attributes = createdProperty.GetCustomAttributes(false).ToArray();
Assert.Equal(1, attributes.Length);
Assert.True(attributes[0] is IntPropertyAttribute);
Assert.Equal(expectedValue, (attributes[0] as IntPropertyAttribute).Value);
}
开发者ID:ESgarbi,项目名称:corefx,代码行数:32,代码来源:PropertyBuilderSetCustomAttribute.cs
示例5: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Abstract);
FieldBuilder field = type.DefineField("TestField", typeof(object), FieldAttributes.Public);
ConstructorInfo attributeConstructor = typeof(EmptyAttribute).GetConstructor(new Type[0]);
CustomAttributeBuilder attribute = new CustomAttributeBuilder(attributeConstructor, new object[0]);
field.SetCustomAttribute(attribute);
}
开发者ID:AndreGleichner,项目名称:corefx,代码行数:9,代码来源:FieldBuilderSetCustomAttribute.cs
示例6: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Abstract);
EventBuilder eventBuilder = type.DefineEvent("TestEvent", EventAttributes.None, typeof(TestEventHandler));
ConstructorInfo attributeConstructor = typeof(EmptyAttribute).GetConstructor(new Type[0]);
CustomAttributeBuilder attribute = new CustomAttributeBuilder(attributeConstructor, new object[0]);
eventBuilder.SetCustomAttribute(attribute);
}
开发者ID:ESgarbi,项目名称:corefx,代码行数:9,代码来源:EventBuilderSetCustomAttribute.cs
示例7: SetCustomAttribute_CustomAttributeBuilder_TypeCreated_ThrowsInvalidOperationException
public void SetCustomAttribute_CustomAttributeBuilder_TypeCreated_ThrowsInvalidOperationException()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Abstract);
FieldBuilder field = type.DefineField("TestField", typeof(object), FieldAttributes.Public);
ConstructorInfo con = typeof(EmptyAttribute).GetConstructor(new Type[0]);
CustomAttributeBuilder attribute = new CustomAttributeBuilder(con, new object[0]);
type.CreateTypeInfo().AsType();
Assert.Throws<InvalidOperationException>(() => { field.SetCustomAttribute(attribute); });
}
开发者ID:AndreGleichner,项目名称:corefx,代码行数:10,代码来源:FieldBuilderSetCustomAttribute.cs
示例8: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Public);
string[] typeParamNames = new string[] { "TFirst" };
GenericTypeParameterBuilder[] typeParams = type.DefineGenericParameters(typeParamNames);
ConstructorInfo constructorinfo = typeof(HelperAttribute).GetConstructor(new Type[] { typeof(string) });
CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(constructorinfo, new object[] { "TestString" });
typeParams[0].SetCustomAttribute(attributeBuilder);
}
开发者ID:ChuangYang,项目名称:corefx,代码行数:10,代码来源:GenericTypeParameterBuilderSetCustomAttribute.cs
示例9: SetCustomAttribute_CustomAttributeBuilder_TypeCreated_ThrowsInvalidOperationException
public void SetCustomAttribute_CustomAttributeBuilder_TypeCreated_ThrowsInvalidOperationException()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Abstract);
EventBuilder eventBuilder = type.DefineEvent("TestEvent", EventAttributes.None, typeof(TestEventHandler));
ConstructorInfo attributeConstructor = typeof(EmptyAttribute).GetConstructor(new Type[0]);
CustomAttributeBuilder attribute = new CustomAttributeBuilder(attributeConstructor, new object[0]);
type.CreateTypeInfo().AsType();
Assert.Throws<InvalidOperationException>(() => eventBuilder.SetCustomAttribute(attribute));
}
开发者ID:ESgarbi,项目名称:corefx,代码行数:10,代码来源:EventBuilderSetCustomAttribute.cs
示例10: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
ModuleBuilder module = Helpers.DynamicModule();
ConstructorInfo attributeConstructor = typeof(IntAllAttribute).GetConstructor(new Type[] { typeof(int) });
CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(attributeConstructor, new object[] { 5 });
module.SetCustomAttribute(attributeBuilder);
object[] attributes = module.GetCustomAttributes().ToArray();
Assert.Equal(1, attributes.Length);
Assert.True(attributes[0] is IntAllAttribute);
Assert.Equal(5, ((IntAllAttribute)attributes[0])._i);
}
开发者ID:ChuangYang,项目名称:corefx,代码行数:12,代码来源:ModuleBuilderSetCustomAttribute.cs
示例11: SetCustomAttribute_CustomAttributeBuilder_TypeNotCreated_ThrowsInvalidOperationException
public void SetCustomAttribute_CustomAttributeBuilder_TypeNotCreated_ThrowsInvalidOperationException()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Class | TypeAttributes.Public);
PropertyBuilder property = type.DefineProperty("TestProperty", PropertyAttributes.HasDefault, typeof(int), null);
Type[] ctorParamTypes = new Type[] { typeof(int) };
object[] ctorParamValues = new object[] { 10 };
CustomAttributeBuilder customAttrBuilder = new CustomAttributeBuilder(typeof(IntPropertyAttribute).GetConstructor(ctorParamTypes), ctorParamValues);
type.CreateTypeInfo().AsType();
Assert.Throws<InvalidOperationException>(() => property.SetCustomAttribute(customAttrBuilder));
}
开发者ID:ESgarbi,项目名称:corefx,代码行数:12,代码来源:PropertyBuilderSetCustomAttribute.cs
示例12: SetCustomAttribute
public void SetCustomAttribute()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.NotPublic);
ConstructorInfo constructor = typeof(TypeBuilderStringAttribute).GetConstructor(new Type[] { typeof(string) });
CustomAttributeBuilder cuatbu = new CustomAttributeBuilder(constructor, new object[] { "hello" });
type.SetCustomAttribute(cuatbu);
type.CreateTypeInfo().AsType();
object[] attributes = type.GetCustomAttributes(false).ToArray();
Assert.Equal(1, attributes.Length);
Assert.True(attributes[0] is TypeBuilderStringAttribute);
Assert.Equal("hello", ((TypeBuilderStringAttribute)attributes[0]).Creator);
}
开发者ID:Corillian,项目名称:corefx,代码行数:14,代码来源:TypeBuilderSetCustomAttribute.cs
示例13: SetCustomAttribute
public void SetCustomAttribute(CustomAttributeBuilder customBuilder)
{
Universe u = typeBuilder.ModuleBuilder.universe;
if (customBuilder.Constructor.DeclaringType == u.System_Runtime_CompilerServices_SpecialNameAttribute)
{
attributes |= EventAttributes.SpecialName;
}
else
{
if (lazyPseudoToken == 0)
{
lazyPseudoToken = typeBuilder.ModuleBuilder.AllocPseudoToken();
}
typeBuilder.ModuleBuilder.SetCustomAttribute(lazyPseudoToken, customBuilder);
}
}
开发者ID:koush,项目名称:mono,代码行数:16,代码来源:EventBuilder.cs
示例14: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.NotPublic);
Type attributeType = typeof(TypeBuilderIntAttribute);
ConstructorInfo attriubteConstructor = attributeType.GetConstructors()[0];
FieldInfo attributeField = attributeType.GetField("Field12345");
CustomAttributeBuilder attribute = new CustomAttributeBuilder(attriubteConstructor, new object[] { 4 }, new FieldInfo[] { attributeField }, new object[] { "hello" });
type.SetCustomAttribute(attribute);
type.CreateTypeInfo().AsType();
object[] attributes = type.GetCustomAttributes(false).ToArray();
Assert.Equal(1, attributes.Length);
TypeBuilderIntAttribute obj = (TypeBuilderIntAttribute)attributes[0];
Assert.Equal("hello", obj.Field12345);
Assert.Equal(4, obj.m_ctorType2);
}
开发者ID:Corillian,项目名称:corefx,代码行数:19,代码来源:TypeBuilderSetCustomAttribute.cs
示例15: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.Public);
ConstructorBuilder constructor = type.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new Type[0]);
ILGenerator ilGenerator = constructor.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_1);
ConstructorInfo attributeConstructor = typeof(IntAllAttribute).GetConstructor(new Type[] { typeof(int) });
CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(attributeConstructor, new object[] { 2 });
constructor.SetCustomAttribute(attributeBuilder);
Type createdType = type.CreateTypeInfo().AsType();
ConstructorInfo createdConstructor = createdType.GetConstructor(new Type[0]);
Attribute[] customAttributes = createdConstructor.GetCustomAttributes(true).ToArray();
Assert.Equal(1, customAttributes.Length);
Assert.Equal(2, ((IntAllAttribute)customAttributes[0])._i);
}
开发者ID:swaroop-sridhar,项目名称:corefx,代码行数:19,代码来源:ConstructorBuilderSetCustomAttribute.cs
示例16: SetAttribute
internal void SetAttribute(CustomAttributeBuilder cab)
{
Universe u = cab.Constructor.Module.universe;
Type type = cab.Constructor.DeclaringType;
if (copyright == null && type == u.System_Reflection_AssemblyCopyrightAttribute)
{
copyright = (string)cab.GetConstructorArgument(0);
}
else if (trademark == null && type == u.System_Reflection_AssemblyTrademarkAttribute)
{
trademark = (string)cab.GetConstructorArgument(0);
}
else if (product == null && type == u.System_Reflection_AssemblyProductAttribute)
{
product = (string)cab.GetConstructorArgument(0);
}
else if (company == null && type == u.System_Reflection_AssemblyCompanyAttribute)
{
company = (string)cab.GetConstructorArgument(0);
}
else if (description == null && type == u.System_Reflection_AssemblyDescriptionAttribute)
{
description = (string)cab.GetConstructorArgument(0);
}
else if (title == null && type == u.System_Reflection_AssemblyTitleAttribute)
{
title = (string)cab.GetConstructorArgument(0);
}
else if (informationalVersion == null && type == u.System_Reflection_AssemblyInformationalVersionAttribute)
{
informationalVersion = (string)cab.GetConstructorArgument(0);
}
else if (culture == null && type == u.System_Reflection_AssemblyCultureAttribute)
{
culture = (string)cab.GetConstructorArgument(0);
}
else if (fileVersion == null && type == u.System_Reflection_AssemblyFileVersionAttribute)
{
fileVersion = (string)cab.GetConstructorArgument(0);
}
}
开发者ID:ikvm,项目名称:IKVM.NET-cvs-clone,代码行数:41,代码来源:VersionInfo.cs
示例17: MyCreateCallee
private static Type MyCreateCallee(AppDomain domain)
{
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "EmittedAssembly";
// Define a dynamic assembly in the current application domain.
AssemblyBuilder myAssembly =
domain.DefineDynamicAssembly(myAssemblyName,AssemblyBuilderAccess.Run);
// Define a dynamic module in this assembly.
ModuleBuilder myModuleBuilder = myAssembly.DefineDynamicModule("EmittedModule");
// Construct a 'TypeBuilder' given the name and attributes.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("HelloWorld",
TypeAttributes.Public);
// Define a constructor of the dynamic class.
ConstructorBuilder myConstructor = myTypeBuilder.DefineConstructor(
MethodAttributes.Public, CallingConventions.Standard, new Type[]{typeof(String)});
ILGenerator myILGenerator = myConstructor.GetILGenerator();
myILGenerator.Emit(OpCodes.Ldstr, "Constructor is invoked");
myILGenerator.Emit(OpCodes.Ldarg_1);
MethodInfo myMethodInfo =
typeof(Console).GetMethod("WriteLine",new Type[]{typeof(string)});
myILGenerator.Emit(OpCodes.Call, myMethodInfo);
myILGenerator.Emit(OpCodes.Ret);
Type myType = typeof(MyAttribute);
ConstructorInfo myConstructorInfo = myType.GetConstructor(new Type[]{typeof(object)});
try
{
CustomAttributeBuilder methodCABuilder = new CustomAttributeBuilder (myConstructorInfo, new object [] { TypeCode.Double } );
myConstructor.SetCustomAttribute(methodCABuilder);
}
catch(ArgumentNullException ex)
{
Console.WriteLine("The following exception has occured : "+ex.Message);
}
catch(Exception ex)
{
Console.WriteLine("The following exception has occured : "+ex.Message);
}
return myTypeBuilder.CreateType();
}
开发者ID:nobled,项目名称:mono,代码行数:40,代码来源:test-295.cs
示例18: TestSetCustomAttribute1
public void TestSetCustomAttribute1()
{
string name = "Assembly1";
AssemblyName asmname = new AssemblyName();
asmname.Name = name;
AssemblyBuilder asmbuild = AssemblyBuilder.DefineDynamicAssembly(asmname, AssemblyBuilderAccess.Run);
ModuleBuilder modbuild = TestLibrary.Utilities.GetModuleBuilder(asmbuild, "Module1");
TypeBuilder tpbuild = modbuild.DefineType("C1");
MethodBuilder methbuild = tpbuild.DefineMethod("method1", MethodAttributes.Public | MethodAttributes.Static, typeof(void), new Type[] { typeof(int) });
ParameterBuilder parambuild = methbuild.DefineParameter(1, ParameterAttributes.HasDefault, "testParam");
ILGenerator ilgen = methbuild.GetILGenerator();
ilgen.Emit(OpCodes.Ret);
Type attrType = typeof(MBMyAttribute3);
ConstructorInfo ci = attrType.GetConstructors()[0];
FieldInfo fi = attrType.GetField("Field12345");
CustomAttributeBuilder cab = new CustomAttributeBuilder(ci,
new object[] { 4 },
new FieldInfo[] { fi },
new object[] { "hello" });
parambuild.SetCustomAttribute(cab);
Type tp = tpbuild.CreateTypeInfo().AsType();
MethodInfo md = tp.GetMethod("method1");
ParameterInfo pi = md.GetParameters()[0];
// VERIFY
object[] attribs = pi.GetCustomAttributes(false).Select(a => (object)a).ToArray();
Assert.Equal(1, attribs.Length);
MBMyAttribute3 obj = (MBMyAttribute3)attribs[0];
Assert.Equal("hello", obj.Field12345);
Assert.Equal(4, obj.m_ctorType2);
}
开发者ID:Rayislandstyle,项目名称:corefx,代码行数:37,代码来源:SetCustomAttributeTests.cs
示例19: SetCustomAttribute_CustomAttributeBuilder
public void SetCustomAttribute_CustomAttributeBuilder()
{
TypeBuilder type = Helpers.DynamicType(TypeAttributes.NotPublic);
MethodBuilder method = type.DefineMethod("TestMethod", MethodAttributes.Public | MethodAttributes.Static);
ILGenerator ilgen = method.GetILGenerator();
ilgen.Emit(OpCodes.Ldc_I4, 100);
ilgen.Emit(OpCodes.Ret);
Type attributeType = typeof(MethodBuilderCustomIntAttribute);
ConstructorInfo constructor = attributeType.GetConstructors()[0];
FieldInfo field = attributeType.GetField("Field12345");
CustomAttributeBuilder attribute = new CustomAttributeBuilder(constructor, new object[] { 4 }, new FieldInfo[] { field }, new object[] { "hello" });
method.SetCustomAttribute(attribute);
Type createdType = type.CreateTypeInfo().AsType();
object[] attributes = createdType.GetMethod("TestMethod").GetCustomAttributes(false).ToArray();
Assert.Equal(1, attributes.Length);
MethodBuilderCustomIntAttribute obj = (MethodBuilderCustomIntAttribute)attributes[0];
Assert.Equal("hello", obj.Field12345);
Assert.Equal(4, obj._intField);
}
开发者ID:Corillian,项目名称:corefx,代码行数:24,代码来源:MethodBuilderSetCustomAttribute.cs
示例20: WriteMarshallingDescriptor
private static int WriteMarshallingDescriptor(ModuleBuilder module, CustomAttributeBuilder attribute)
{
UnmanagedType unmanagedType;
object val = attribute.GetConstructorArgument(0);
if (val is short)
{
unmanagedType = (UnmanagedType)(short)val;
}
else if (val is int)
{
unmanagedType = (UnmanagedType)(int)val;
}
else
{
unmanagedType = (UnmanagedType)val;
}
ByteBuffer bb = new ByteBuffer(5);
bb.WriteCompressedUInt((int)unmanagedType);
if (unmanagedType == UnmanagedType.LPArray)
{
UnmanagedType arraySubType = attribute.GetFieldValue<UnmanagedType>("ArraySubType") ?? NATIVE_TYPE_MAX;
bb.WriteCompressedUInt((int)arraySubType);
int? sizeParamIndex = attribute.GetFieldValue<short>("SizeParamIndex");
int? sizeConst = attribute.GetFieldValue<int>("SizeConst");
if (sizeParamIndex != null)
{
bb.WriteCompressedUInt(sizeParamIndex.Value);
if (sizeConst != null)
{
bb.WriteCompressedUInt(sizeConst.Value);
bb.WriteCompressedUInt(1); // flag that says that SizeParamIndex was specified
}
}
else if (sizeConst != null)
{
bb.WriteCompressedUInt(0); // SizeParamIndex
bb.WriteCompressedUInt(sizeConst.Value);
bb.WriteCompressedUInt(0); // flag that says that SizeParamIndex was not specified
}
}
else if (unmanagedType == UnmanagedType.SafeArray)
{
VarEnum? safeArraySubType = attribute.GetFieldValue<VarEnum>("SafeArraySubType");
if (safeArraySubType != null)
{
bb.WriteCompressedUInt((int)safeArraySubType);
Type safeArrayUserDefinedSubType = (Type)attribute.GetFieldValue("SafeArrayUserDefinedSubType");
if (safeArrayUserDefinedSubType != null)
{
WriteType(module, bb, safeArrayUserDefinedSubType);
}
}
}
else if (unmanagedType == UnmanagedType.ByValArray)
{
bb.WriteCompressedUInt(attribute.GetFieldValue<int>("SizeConst") ?? 1);
UnmanagedType? arraySubType = attribute.GetFieldValue<UnmanagedType>("ArraySubType");
if (arraySubType != null)
{
bb.WriteCompressedUInt((int)arraySubType);
}
}
else if (unmanagedType == UnmanagedType.ByValTStr)
{
bb.WriteCompressedUInt(attribute.GetFieldValue<int>("SizeConst").Value);
}
else if (unmanagedType == UnmanagedType.Interface
|| unmanagedType == UnmanagedType.IDispatch
|| unmanagedType == UnmanagedType.IUnknown)
{
int? iidParameterIndex = attribute.GetFieldValue<int>("IidParameterIndex");
if (iidParameterIndex != null)
{
bb.WriteCompressedUInt(iidParameterIndex.Value);
}
}
else if (unmanagedType == UnmanagedType.CustomMarshaler)
{
bb.WriteCompressedUInt(0);
bb.WriteCompressedUInt(0);
string marshalType = (string)attribute.GetFieldValue("MarshalType");
if (marshalType != null)
{
WriteString(bb, marshalType);
}
else
{
WriteType(module, bb, (Type)attribute.GetFieldValue("MarshalTypeRef"));
}
WriteString(bb, (string)attribute.GetFieldValue("MarshalCookie") ?? "");
}
return module.Blobs.Add(bb);
}
开发者ID:JokerMisfits,项目名称:linux-packaging-mono,代码行数:96,代码来源:MarshalSpec.cs
注:本文中的CustomAttributeBuilder类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论