CA1417 : n’utilisez pas OutAttribute
sur les paramètres de chaîne pour les P/Invoke
Propriété | Value |
---|---|
Identificateur de la règle | CA1417 |
Titre | Ne pas utiliser OutAttribute sur les paramètres de chaîne pour les P/Invokes |
Catégorie | Interopérabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre d’avertissement |
Cause
Un paramètre de chaîne P/Invoke est passé par valeur et marqué avec OutAttribute.
Description de la règle
Le runtime .NET effectue automatiquement une centralisation de chaînes. Si une chaîne centralisée marquée avec OutAttribute est passée par valeur à une méthode P/Invoke, le runtime peut être déstabilisé.
Comment corriger les violations
Si le marshalling des données de chaîne modifiées à l’appelant est requis, transmettez la chaîne par référence à la place. Sinon, le OutAttribute peut être supprimé sans aucune autre modification.
// Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);
// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);
// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);
Quand supprimer les avertissements
Il n’est pas sûr de supprimer un avertissement de cette règle.
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour