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 |
---|---|
Ativa ou desativa o mapeamento de melhor ajuste. |
|
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. |
|
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. |
|
Especifica o ponto de entrada DLL a ser chamado. |
|
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. |
|
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). |
|
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. |
|
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
Criando uma classe para manter funções DLL