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
Collaborer avec nous sur GitHub
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.