MarshalAsAttribute Sizeconst .NET
-
03-07-2019 - |
Question
En utilisant C #, quelqu'un sait-il comment obtenir la valeur Sizeconst de MarshalAsAttribute au moment de l'exécution?
Par exemple. J'aimerais récupérer la valeur de 10.
[StructLayout[LayoutKind.Sequential, Pack=1]
Class StructureToMarshalFrom
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] _value1;
}
La solution
Oui, avec 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 beaucoup de vérification d'erreur, mais devrait fonctionner.)
Autres conseils
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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow