CA1417: Non usare OutAttribute
nei parametri stringa per P/Invokes
Proprietà | valore |
---|---|
ID regola | CA1417 |
Title | Non usare OutAttribute sui parametri di stringa per P/Invokes |
Categoria | Interoperabilità |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come avviso |
Causa
Un parametro stringa P/Invoke viene passato per valore e contrassegnato con OutAttribute.
Descrizione regola
Il runtime .NET esegue automaticamente l'interno delle stringhe. Se una stringa internata contrassegnata con OutAttribute viene passata per valore a un P/Invoke, il runtime può essere destabilizzato.
Come correggere le violazioni
Se è necessario eseguire il marshalling dei dati stringa modificati al chiamante, passare invece la stringa per riferimento. In caso contrario, l'oggetto OutAttribute può essere rimosso senza altre modifiche.
// 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);
Quando eliminare gli avvisi
Non è sicuro eliminare un avviso da questa regola.
Vedi anche
Collabora con noi su GitHub
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.