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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de