Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
CA1417: Não usar
| Property | Valor |
|---|---|
| ID da regra | CA1417 |
| Título | Não usar OutAttribute em parâmetros de cadeia de caracteres para P/Invokes |
| Categoria | Interoperabilidade |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Como aviso |
Causa
Um parâmetro de cadeia de caracteres P/Invoke é transmitido por valor e marcado com OutAttribute.
Descrição da regra
O runtime do .NET executa automaticamente a centralização de cadeia de caracteres. Se uma cadeia de caracteres centralizada marcada com OutAttribute for transmitida por valor para um P/Invoke, o runtime poderá ser desestabilizado.
Como corrigir violações
Se o marshaling de dados de cadeia de caracteres modificados de volta para o chamador for necessário, transmita a cadeia de caracteres por referência. Caso contrário, o OutAttribute poderá ser removido sem 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 um aviso dessa regra.