Compartilhar via


Pontos de entrada de P/Invoke devem existir

TypeName

PInvokeEntryPointsShouldExist

CheckId

CA1400

Category (Categoria)

Microsoft.interoperabilidade

Quebrando alterar

Não separável

Causa

Um método público ou protegido é marcado com o System.Runtime.InteropServices.DllImportAttribute. Ou a biblioteca não gerenciada não pôde ser localizada ou o método não pôde ser correspondido para uma função na biblioteca.Se a regra não puder encontrar o nome do método exatamente sistema autônomo especificado, ele procura por ANSI ou versões de caractere largo do método, sufixo de 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 __stdcall (_MyMethod@12, onde 12 representa o comprimento dos argumentos).Se nenhuma correspondência for encontrada e o nome do método começa com '#', a regra procurará a função sistema autônomo uma referência ordinal em vez de uma referência de nome.

Descrição da regra

Não há nenhuma verificação de time de compilar para garantir que os métodos marcados com DllImportAttribute existe na DLL não gerenciada referenciada. Se nenhuma função que tem o nome especificado existe na biblioteca, ou os argumentos do método não coincidem com os argumentos da função, o common linguagem tempo de execução lançará uma exceção.

Como corrigir violações

Para corrigir uma violação dessa regra, corrigir o método que possui o DllImportAttribute atributo. Se a biblioteca não gerenciada existe e está no mesmo diretório sistema autônomo o sembly sistema autônomo que contém o método.Se a biblioteca estiver presente e corretamente referenciado, verifique se o nome do método, tipo de retorno e assinatura de argumento correspondem a função de biblioteca.

Quando suprimir avisos

Eliminar um aviso da regra quando a biblioteca não gerenciada está no mesmo diretório do assembly gerenciado que faz referência a ele.Talvez seja seguro eliminar um aviso da regra no caso em que a biblioteca não gerenciada não pôde ser localizada.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.Não há nenhuma função chamada DoSomethingUnmanaged no 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();
   }
}

Consulte também

Referência

System.Runtime.InteropServices.DllImportAttribute