Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
CA1417: Do not use
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 9 | 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.