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:
Para compilação as amostras utilizando o aviso de comando
Abrir um aviso de comando janela e navegar até um dos subdiretórios específicos do linguagem.
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
Abra o Windows Explorer e navegar para um do específico a um linguagem subdiretórios.
clicar duas vezes no ícone para [nome de arquivo] .sln em em aberto o arquivo no Visual Studio.
No Compilação menu, selecionar Criar solução.
Para executar os exemplos
navegar até um dos diretórios específicos do linguagem, no diretório a WinAPIs ou personalizada, que contém arquivos executáveis incorporados.
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