Compartilhar via


Criando protótipos em código gerenciado

Este tópico descreve como acesso não gerenciados funções e introduz vários campos de atributo anotar a definição do método no código gerenciado.Para exemplos que demonstram como construir declarações baseados em .NET a ser usado com invocação de plataforma, consulte marshaling de dados com invocação de plataforma.

Antes de poder acessar uma função DLL não gerenciada do código gerenciado, você precisa saber o nome da função e o nome da DLL que exporta.Com essas informações, você pode começar a escrever a definição de gerenciado para uma função não gerenciada é implementada em uma DLL.Além disso, você pode ajustar a forma de invocação de plataforma que cria a função e empacota dados e para a função.

Observação:

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

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

Definições gerenciadas para funções não gerenciadas são dependentes de linguagem, sistema autônomo você pode ver sistema autônomo 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 os campos para um Microsoft Visual Basic 2005 demonstrativo, você deve usar o DllImportAttribute atributo em vez da Declare demonstrativo.

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 de

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

A tabela a seguir lista o conjunto completo de atributo campos que pertencem invocação de plataforma.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 de método.O padrão é WinAPI, que corresponde à __stdcall para as plataformas com base em Intel 32 bit.

CharSet

Desconfiguração do nome de controles e o modo como 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 caractere.O valor padrão varia por 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 retornado.

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

SetLastError

Permite que o chamador para use o Marshal.GetLastWin32Error Função de API para determinar se ocorreu um erro ao executar o método. No Visual Basic, o padrão é true; em translation from VPE for Csharp e C++, o padrão é false.

ThrowOnUnmappableChar

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

Para obter informações de referência detalhadas, consulte Classe DllImportAttribute.

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

Identificando funções em DLLs

Criando uma classe para manter funções DLL

Outros recursos

Chamando uma função DLL