Compartilhar via


Exemplo de tecnologia de invocação de plataforma

Este exemplo demonstra técnicas para chamar funções exportadas de uma biblioteca não gerenciada.Ele mostra como:

  • Declarar tipos diferentes

  • Use atributos disponível para modificar o comportamento padrão

  • Use métodos do Marshal tipo

  • Determine quais aspectos de coleta de lixo e threading pode afetar os resultados.

Alguns dos exemplos usam funções exportadas de bibliotecas do Windows e outros usam funções exportadas de uma biblioteca personalizada.Alguns exemplos de usar bibliotecas que não estão disponível em todas as plataformas Windows ou usar funções de maneiras que não são suportadas em todas as plataformas Windows.No entanto, isso não impede que você Noções básicas sobre as regras que são usadas em uma amostra de invocação de plataforma específica.

Esses exemplos contêm a seguinte estrutura de diretório:

Diretório

Contents

WinAPIs

invocação de plataforma demonstrado usando funções exportadas de bibliotecas do Windows

WinAPIs\CS

Fontes escritos em translation from VPE for Csharp

WinAPIs\VB

Fontes escritos em Visual Basic

Personalizado

invocação de plataforma demonstrado usando funções exportados de uma biblioteca de tipos personalizados.

Custom\CS

Fontes escritos em translation from VPE for Csharp

Custom\LIB

Fonte da biblioteca de tipo personalizado

Custom\VB

Fontes de escrita em VB

Para obter informações sobre como usar os exemplos, consulte os tópicos a seguir:

Download sample

Para compilação as amostras utilizando o aviso de comando

  1. Abrir um aviso de comando janela e navegar até um dos subdiretórios específicos do linguagem.

  2. Tipo de MSBUILD [nome de arquivo].sln na linha de comando.

    Observação:

    Exemplos de invocação de plataforma a Custom só pode ser criado usando o Visual Studio.

Para criar os exemplos usando o Visual Studio

  1. Abra o Windows Explorer e navegar para um do específico a um linguagem subdiretórios.

  2. clicar duas vezes no ícone para [nome de arquivo] .sln em em aberto o arquivo no Visual Studio.

  3. No Compilação menu, selecionar Criar solução.

Para executar os exemplos

  1. navegar até um dos diretórios específicos do linguagem, no diretório a WinAPIs ou personalizada, que contém arquivos executáveis incorporados.

  2. Digite o nome do arquivo executável na linha de comando.

    Observação:

    Este exemplo cria aplicativos de console.Você deve iniciá-los separadamente, usando o aviso de comando, para exibir sua saída.

Requisitos

Estes exemplos exigem cabeçalhos do Windows que estão disponível para seu projeto, se você criar usando Microsoft Visual Studio 2005, o aviso de comando do Visual Studio 2005, ou se você tiver o plataforma SDK instalado e especificado em um caminho de inclusão.

Comentários

As tabelas a seguir resumem os tópicos demonstrados por essas Exemplos e listam os locais dos arquivos de fonte da amostra ou Exemplos pertencentes a esse tópico.

Como usar o invocação de plataforma atributos

Atributo

Descrição

Exemplo

EntryPoint

Renomeia uma função para uso em código gerenciado.

WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb

Conjunto de caracteres

Escolhe como seqüências de caracteres são empacotadas; também afeta os critérios de Pesquisar de nome de função.

WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb

ExactSpelling

Indica se o nome do ponto de entrada na DLL não gerenciada deve ser modificado para corresponder ao valor CharSet.

WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb

CallingConvention

Chama as funções com varargs.

WinAPIs\CS\Printf.cs WinAPIs\VB\Printf.vb

PreserveSig

Modifica as funções que retornam HRESULTs.

WinAPIs\CS\CreateObject.cs WinAPIs\VB\CreateObject.vb

SetLastError

Garante que o código de erro é salvo após uma telefonar de função.

WinAPIs\CS\Errors.cs WinAPIs\VB\Errors.vb

Como realizar marshaling de estruturas e uniões

Type (Tipo)

Descrição

Exemplo

estrutura ByVal

Passa uma estrutura sistema autônomo um parâmetro de entrada.

Custom\CS\Structs.cs Custom\VB\Structs.vb

estrutura ByRef

Passa uma estrutura sistema autônomo um parâmetro de entrada/saída.

WinAPIs\CS\OSInfo.cs WinAPIs\VB\OSInfo.vb

classe ByVal

Passa uma classe com somente inteiro membros sistema autônomo um parâmetro de entrada/saída.

WinAPIs\CS\SysTime.cs WinAPIs\VB\SysTime.vb

estrutura com estruturas aninhadas (nivelados)

Produz uma classe que represente uma estrutura com estruturas aninhadas no lado não gerenciado.Estrutura é nivelada em uma estrutura grande no lado gerenciado.

WinAPIs\CS\FindFile.cs WinAPIs\VB\FindFile.vb

estrutura com estruturas aninhadas (não nivelados)

Passa uma estrutura com uma estrutura incorporada.

Custom\CS\Structs.cs Custom\VB\Structs.vb

estrutura que contém o ponteiro para outra estrutura

Passa uma estrutura que contém um ponteiro para outra estrutura sistema autônomo um membro.

Custom\CS\Structs.cs Custom\VB\Structs.vb

matriz de estruturas que contêm apenas números inteiros ByVal

Passa uma matriz de estruturas que contêm apenas números inteiros sistema autônomo um parâmetro de entrada/saída.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

matriz de estruturas que contêm números inteiros e seqüências de ByRef

Passa uma matriz de estruturas que contêm números inteiros e seqüências de caracteres sistema autônomo o parâmetro de saída.computador chamado aloca memória para a matriz.

Custom\CS\OutArrayOfStructs.cs Custom\VB\OutArrayOfStructs.vb

uniões com tipos de valor

Passa uma união com tipos de valor (inteiro e duplo).

Custom\CS\Unions.cs Custom\VB\Unions.vb

uniões com tipos mistos

Passa uma união com tipos mistos (inteiro e String).

Custom\CS\Unions.cs Custom\VB\Unions.vb

Como realizar realizar marshaling matrizes

Matriz

Descrição

Exemplo

matriz de inteiros ByVal

Passa uma matriz de inteiros sistema autônomo um parâmetro de entrada/saída.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

matriz de inteiros ByRef

Passa uma matriz de inteiros sistema autônomo um parâmetro de entrada/saída.Matriz pode ser redimensionada.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

Matriz 2D de inteiros ByVal

Transmitindo uma matriz de inteiros sistema autônomo um parâmetro de entrada/saída.

Custom\CS\Arrays.cs Custom\VB\Arrays.vb

Diversos

Tipo de item

Descrição

Exemplo

HandleRef

Apresenta um caso ao HandleRef precisa ser usado para evitar a coleta de lixo.

WinAPIs\CS\HandleRef.cs WinAPIs\VB\HandleRef.vb

ponteiros de função

Passa um delegado para uma função não gerenciada que espera um ponteiro de função.

Custom\CS\Callback.cs Custom\VB\Callback.vb

void *

Chama uma função que tenha void * sistema autônomo um parâmetro.

Custom\CS\Void.cs Custom\VB\Void.vb

LPARAM

Usa o GCHandle para passar um objeto gerenciado para a função não gerenciada que espera LPARAM.

WinAPIs\CS\GCHandle.cs WinAPIs\VB\GCHandle.vb

Único-Threaded Apartment (STA) / vários segmentos (MTA) do compartimento

Altera as configurações de apartment padrão quando uma função não gerenciada chama CoInitialize.

WinAPIs\CS\ActiveDir.cs WinAPIs\VB\ActiveDir.vb

Comentários de revisão em arquivos de código-fonte para obter mais informações sobre a plataforma chamam.

Consulte também

Conceitos

Consumir funções DLL não gerenciada

Exemplos de invocação de plataforma

Referência

CharSet

DllImportAttribute

LayoutKind

Marshal

MarshalAsAttribute

StructLayoutAttribute

Outros recursos

Padrão o comportamento de empacotamento

Dados empacotamento com plataforma Invoke