Usando PInvoke explícito no C++ (atributo DllImport)
O .NET Framework fornece recursos explícitos de Invocação de Plataforma (ou PInvoke) com o atributo Dllimport
para permitir que aplicativos gerenciados chamem funções não gerenciadas empacotadas dentro de DLLs. O PInvoke explícito é necessário nas situações em que APIs não gerenciadas são empacotadas como DLLs e o código-fonte não está disponível. Chamar funções Win32, por exemplo, requer PInvoke. Em outras situações, use PInvoke implícito; confira Usar a interoperabilidade do C++ (PInvoke Implícito) para mais informações.
O PInvoke funciona usando DllImportAttribute. Esse atributo, que leva o nome da DLL como seu primeiro argumento, é colocado antes de uma declaração de função para cada ponto de entrada de DLL que será usado. A assinatura da função deve corresponder ao nome de uma função exportada pela DLL (mas alguma conversão de tipo pode ser executada implicitamente definindo as declarações DllImport
em termos de tipos gerenciados).
O resultado é um ponto de entrada gerenciado para cada função DLL nativa que contém o código de transição necessário (ou thunk) e conversões de dados simples. Em seguida, as funções gerenciadas podem chamar a DLL por meio desses pontos de entrada. O código inserido em um módulo como resultado do PInvoke é totalmente gerenciado.
Nesta seção
Como chamar DLLs nativas de código gerenciado usando PInvoke
Como realizar marshaling de cadeias de caracteres usando PInvoke
Como realizar marshaling de ponteiros de função usando PInvoke
Como realizar marshaling de ponteiros inseridos usando PInvoke