2008-10-14 4 views
1

En utilisant C#, quelqu'un sait-il comment obtenir la valeur Sizeconst de MarshalAsAttribute en cours d'exécution?MarshalAsAttribute Sizeconst .NET

Par exemple. Je voudrais récupérer la valeur de 10.

[StructLayout[LayoutKind.Sequential, Pack=1] 
Class StructureToMarshalFrom 
{ 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
    public byte[] _value1; 
} 

Merci à l'avance

Répondre

4

Eh oui, avec la réflexion:

FieldInfo field = typeof(StructureToMarshalFrom).GetField("_value1"); 
object[] attributes = field.GetCustomAttributes(typeof(MarshalAsAttribute), false); 
MarshalAsAttribute marshal = (MarshalAsAttribute) attributes[0]; 
int sizeConst = marshal.SizeConst; 

(non testé, et manque évidemment plutôt beaucoup de vérification des erreurs, mais devrait fonctionner.)

+0

Bien fait. Compilé la première fois. Merci – MegaByte

1
var x = new StructureToMarshalFrom(); 
var fields = x.GetType().GetFields(); 

var att = (MarshalAsAttribute[])fields[0].GetCustomAttributes(typeof(MarshalAsAttribute), false); 
if (att.Length > 0) { 
    Console.WriteLine(att[0].SizeConst); 
}