Condividi tramite


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