Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
CA1417: Não use
| Property | valor |
|---|---|
| ID da regra | CA1417 |
| Título | Não use OutAttribute parâmetros de cadeia de caracteres para P/Invokes |
| Categoria | Interoperabilidade |
| A correção está quebrando ou não quebrando | Sem quebra |
| Habilitado por padrão no .NET 10 | Como aviso |
Motivo
Um parâmetro de cadeia de caracteres P/Invoke é passado por valor e marcado com OutAttribute.
Descrição da regra
O tempo de execução do .NET executa automaticamente o interning de cadeia de caracteres. Se uma cadeia de caracteres interned marcada com OutAttribute for passada por valor para um P/Invoke, o tempo de execução pode ser desestabilizado.
Como corrigir violações
Se for necessário empacotar os dados de cadeia de caracteres modificados de volta para o chamador, passe a cadeia de caracteres por referência. Caso contrário, o OutAttribute pode ser removido sem quaisquer outras alterações.
// 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 suprimir avisos
Não é seguro suprimir uma advertência desta regra.