CA1417: Do not use OutAttribute
on string parameters for P/Invokes (No usar OutAttribute
en parámetros de cadena para P/Invoke)
Propiedad | Value |
---|---|
Identificador de la regla | CA1417 |
Título | No usar OutAttribute en parámetros de cadena para P/Invoke |
Categoría | Interoperabilidad |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 8 | Como advertencia |
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 serializar los datos modificados de la cadena de vuelta al autor de la llamada, 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 se puede suprimir una advertencia de esta regla.
Consulte también
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.