Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
CA1417: Do not use
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA1417 |
| Título | No usar OutAttribute en parámetros de cadena para P/Invoke |
| Categoría | Interoperabilidad |
| La corrección interrumpe o no interrumpe | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | Como advertencia |
| Idiomas aplicables | C# y Visual Basic |
Causa
Un parámetro de cadena P/Invoke se pasa como valor y se marca con OutAttribute.
Descripción de la regla
El entorno de ejecución de .NET realiza automáticamente el internamiento de cadenas. Si una cadena internalizada marcada con OutAttribute se pasa por valor a un P/Invoke, el entorno de ejecución se puede desestabilizar.
Cómo corregir infracciones
Si es necesario gestionar los datos modificados de la cadena de vuelta al llamador, pase la cadena por referencia en su lugar. De lo contrario, OutAttribute se puede quitar sin realizar ningún otro cambio.
// 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);
Cuándo suprimir las advertencias
No es seguro suprimir una advertencia de esta regla.