Partilhar via


Consumindo funções DLL não gerenciadas

A invocação de plataforma é um serviço que permite que o código gerenciado chame funções não gerenciadas implementadas em bibliotecas de vínculo dinâmico (DLLs), como as da API do Windows. Ele localiza e invoca uma função exportada e organiza seus argumentos (inteiros, cadeias de caracteres, matrizes, estruturas e assim por diante) através do limite de interoperação, conforme necessário.

Esta seção apresenta tarefas associadas ao consumo de funções DLL não gerenciadas e fornece mais informações sobre a invocação de plataforma. Além das tarefas a seguir, há considerações gerais e um link que fornece informações adicionais e exemplos.

Para consumir funções DLL exportadas

  1. Identifique funções em DLLs.

    Minimamente, você deve especificar o nome da função e o nome da DLL que a contém.

  2. Crie uma classe para manter funções DLL.

    Você pode usar uma classe existente, criar uma classe individual para cada função não gerenciada ou criar uma classe que contenha um conjunto de funções não gerenciadas relacionadas.

  3. Crie protótipos em código gerenciado.

    [Visual Basic] Use a instrução Declare com as palavras-chave Function e Lib . Em alguns casos raros, você pode usar o DllImportAttribute com as palavras-chave Shared Function . Estes casos são explicados mais adiante nesta secção.

    [C#] Use o DllImportAttribute para identificar a DLL e a função. Marque o método com os modificadores estáticos e externos .

    [C++] Use o DllImportAttribute para identificar a DLL e a função. Marque o método ou função do wrapper com "C" externo.

  4. Chame uma função DLL.

    Chame o método em sua classe gerenciada como faria com qualquer outro método gerenciado. A passagem de estruturas e a implementação de funções de retorno de chamada são casos especiais.

Para exemplos que demonstram como construir . Declarações baseadas em NET a serem usadas com invocação de plataforma, consulte Marshalling Data with Platform Invoke.

Um olhar mais atento sobre a plataforma invocar

A invocação de plataforma depende de metadados para localizar funções exportadas e organizar seus argumentos em tempo de execução. A ilustração a seguir mostra esse processo.

Diagram that shows a platform invoke call.

Quando a plataforma invoca uma função não gerenciada, ela executa a seguinte sequência de ações:

  1. Localiza a DLL que contém a função.

  2. Carrega a DLL na memória.

  3. Localiza o endereço da função na memória e envia seus argumentos para a pilha, empacotando dados conforme necessário.

    Nota

    Localizar e carregar a DLL e localizar o endereço da função na memória ocorrem apenas na primeira chamada para a função.

  4. Transfere o controle para a função não gerenciada.

A invocação de plataforma lança exceções geradas pela função não gerenciada para o chamador gerenciado.

Consulte também