CA1400: os pontos de entrada P/Invoke devem existir
TypeName |
PInvokeEntryPointsShouldExist |
CheckId |
CA1400 |
Categoria |
Microsoft.Interoperability |
Alteração Significativa |
Sem quebra |
Causa
Um público ou um método protegido são marcados com DllImportAttribute.Ou biblioteca não gerenciado não pode ser encontrada ou o método não pode corresponder a uma função na biblioteca.Se a regra não pode localizar o nome do método exatamente como foi especificado, procurará ANSI ou versões de ampla caractere do método suffixing o nome do método com “A” ou “W”.Se nenhuma correspondência for encontrada, a regra tenta localizar uma função usando o formato do nome de __stdcall (_MyMethod@12, onde 12 representa o comprimento dos argumentos).Se nenhuma correspondência for encontrada, e o nome do método com “#”, a regra pesquisa pela função como uma referência ordinal no lugar de uma referência de nome.
Descrição da Regra
Nenhuma verificação de tempo de compilação está disponível para garantir que os métodos que são marcados com DllImportAttribute estão localizados na DLL não gerenciados referenciado.Se nenhuma função que tem o nome especificado está na biblioteca, ou nos argumentos para o método não corresponde aos argumentos da função, lançará de Common Language Runtime uma exceção.
Como Corrigir Violações
Para corrigir uma violação desta regra, corrija o método que tem o atributo de DllImportAttribute .Verifique se a biblioteca ainda não existir e gerenciado está no mesmo diretório que o assembly que contém o método.Se a biblioteca estiver presente e referenciados corretamente, verifique se o nome do método, o tipo de retorno, e a correspondência de assinatura o argumento da função de biblioteca.
Quando Suprimir Alertas
Não suprima um aviso desta regra quando a biblioteca não gerenciado está no mesmo diretório que o assembly gerenciado que a referencie.Pode ser segura suprimir um aviso desta regra em casos onde a biblioteca não gerenciado não pode ser encontrada.
Exemplo
O exemplo a seguir mostra um tipo que viola a regra.Nenhuma função que é chamada DoSomethingUnmanaged ocorre em kernel32.dll.
using System.Runtime.InteropServices;
namespace InteroperabilityLibrary
{
public class NativeMethods
{
// If DoSomethingUnmanaged does not exist, or has
// a different signature or return type, the following
// code violates rule PInvokeEntryPointsShouldExist.
[DllImport("kernel32.dll")]
public static extern void DoSomethingUnmanaged();
}
}