Compartilhar via


A criação de protótipos em código gerenciado

Este tópico descreve como acessar as funções não gerenciadas e introduz vários campos de atributo anotar a definição de método no código gerenciado. Para obter exemplos que demonstram como construir.NET com base em declarações para ser usado com a plataforma chamar, consulte o empacotamento de dados com a invocação de plataforma.

Você pode acessar uma função DLL não gerenciada a partir do código gerenciado, você precisará saber o nome da função e o nome da DLL que exporta-lo. Com essas informações, você pode começar a escrever a definição gerenciada para uma função não gerenciada, é implementada em uma DLL. Além disso, você pode ajustar a maneira como essa plataforma chamar cria a função e empacota os dados de e para a função.

Observação

Funções de API do Win32 alocar uma seqüência de caracteres permitem que você libere a seqüência de caracteres usando um método, como LocalFree.Invocação de plataforma trata esses parâmetros de maneira diferente.Chamadas de invocação de plataforma, verifique o parâmetro um IntPtr Digite em vez de um String tipo.Use os métodos são fornecidos pelo System.Runtime.InteropServices.Marshal classe para converter o tipo em uma seqüência manualmente e liberá-la manualmente.

Noções básicas de declaração

As definições gerenciadas para funções não gerenciadas são dependentes de idioma, como você pode ver nos exemplos a seguir. Para obter exemplos de código mais completos, consulte Exemplos de invocação de plataforma.

Imports System.Runtime.InteropServices
Public Class Win32
    Declare Auto Function MessageBox Lib "user32.dll" _
       (ByVal hWnd As Integer, _
        ByVal txt As String, ByVal caption As String, _
        ByVal Typ As Integer) As IntPtr
End Class

Para aplicar o BestFitMapping, CallingConvention, ExactSpelling, PreserveSig, SetLastError, ou ThrowOnUnmappableChar campos para uma Microsoft Visual Basic 2005 declaração, você deve usar o DllImportAttribute de atributo em vez da Declare instrução.

Imports System.Runtime.InteropServices
Public Class Win32
   <DllImport ("user32.dll", CharSet := CharSet.Auto)> _
   Public Shared Function MessageBox (ByVal hWnd As Integer, _
        ByVal txt As String, ByVal caption As String, _
        ByVal Typ As Integer) As IntPtr
   End Function
End Class
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
    public static extern IntPtr MessageBox(int hWnd, String text, 
                                       String caption, uint type);
using namespace System::Runtime::InteropServices;
[DllImport("user32.dll")]
    extern "C" IntPtr MessageBox(int hWnd, String* pText,
    String* pCaption unsigned int uType);

Ajuste a definição

Se você defini-las explicitamente ou não, os campos de atributo são no trabalho, definindo o comportamento do código gerenciado. Invocação de plataforma opera de acordo com a valores padrão definidos em vários campos que existem como metadados em um assembly. Você pode alterar esse comportamento padrão ajustando os valores de um ou mais campos. Em muitos casos, você usar o DllImportAttribute para definir um valor.

A tabela a seguir lista o conjunto completo de campos que pertencem a plataforma chamar de atributo. Para cada campo, a tabela inclui o valor padrão e um link para informações sobre como usar esses campos para definir funções DLL não gerenciadas.

Campo

Descrição

BestFitMapping

Ativa ou desativa o mapeamento de melhor ajuste.

CallingConvention

Especifica a convenção de chamada para usar em passar argumentos do método. O padrão é WinAPI, que corresponde à __stdcall para o 32 bits baseados no Intel plataformas.

CharSet

A desconfiguração do nome de controles e a maneira como os argumentos de seqüência de caracteres devem ser empacotados para a função. O padrão é CharSet.Ansi.

EntryPoint

Especifica o ponto de entrada DLL a ser chamado.

ExactSpelling

Controla se um ponto de entrada deve ser modificado para corresponder ao conjunto de caracteres. O valor padrão varia de acordo com a linguagem de programação.

PreserveSig

Controla se a assinatura do método gerenciado deve ser transformada em uma assinatura não gerenciada que retorna um HRESULT e tem um argumento adicional [out, retval] para o valor de retorno.

O padrão é true (a assinatura não deve ser transformada).

SetLastError

Permite que o chamador para use o Marshal.GetLastWin32Error a função de API para determinar se ocorreu um erro ao executar o método. No Visual Basic, o padrão é true; no C++ e C#, o padrão é false.

ThrowOnUnmappableChar

Controla a lançar uma exceção em um caractere Unicode não mapeável que é convertido em ANSI "?" caractere.

Para obter informações detalhadas, consulte DllImportAttribute classe.

Consulte também

Conceitos

Consumir funções DLL não gerenciada

Especificando um ponto de entrada

Especificando um conjunto de caracteres

Exemplos de invocação de plataforma

Considerações sobre segurança de invocação de plataforma

Identificar funções em DLLs

Criando uma classe para manter as funções DLL

Outros recursos

Chamando uma função DLL