Question

Quand devons-nous utiliser cet attribut et pourquoi en avons-nous besoin?Par exemple, si la fonction native de c prend comme paramètre un pointeur vers un caractère non signé et que je sais qu'il est nécessaire pour remplir le tableau de caractères non signés, pourquoi ne puis-je pas utiliser un tableau d'octets en C # pour utiliser cette fonction?Est-il nécessaire de faire du marshalling?

Était-ce utile?

La solution

Le moteur d'exécution pourra déterminer automatiquement comment rassembler les données entre le code natif et le code géré dans la plupart des cas, vous n'avez donc généralement pas besoin de spécifier l'attribut.MarshalAs n'est nécessaire que lorsqu'il y a une ambiguïté dans la définition (et que vous voulez dire au runtime précisément comment rassembler les données) ou si vous avez besoin d'un comportement autre que celui par défaut.

D'après mon expérience, MarshalAs n'est vraiment nécessaire que lorsque l'on travaille avec des chaînes, car il y a tellement de représentations différentes dans le code natif;unicode / ansi, c-strings ou pas, etc.

Autres conseils

L'utilisation supplémentaire de l'attribut MarshalAs consiste à rassembler des tableaux de taille fixe (y compris des chaînes de taille fixe) avec les paramètres ByValArray et SizeConst.Par exemple, de nombreuses structures de l'API Windows contiennent des chaînes de taille fixe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top