Instrução Declare
Declara uma referência a um procedimento implementado em um arquivo externo.
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Sub ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ]
' -or-
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Function ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ] [ As returntype ]
Partes
attributelist
Opcional.Veja Lista de Atributos.accessmodifier
Opcional.Pode ser um dos seguintes:Shadows
Opcional.Acesse Shadows.charsetmodifier
Opcional.Especifica conjunto de caractere e Pesquisarr informações de arquivo.Pode ser um dos seguintes:ANSI (padrão)
Sub
Opcional, mas qualquer um dos Sub ou Function deve aparecer. Indica que o procedimento externo não retorna um valor.Function
Opcional, mas qualquer um dos Sub ou Function deve aparecer. Indica o procedimento externo retorna um valor.name
Obrigatório.Nome desta referência externa.Para obter mais informações, consulte Nomes de Elementos Declarados.Lib
Obrigatório.Apresenta um Lib cláusula Especifica o arquivo que contém o procedimento que está sendo declarado.libname
Obrigatório.Nome do arquivo que contém o procedimento declarado.Alias
Opcional.Indica que o procedimento que está sendo declarado como não pode ser identificado em seu arquivo com o nome especificado em name. Você especificar sua identificação em aliasname.aliasname
Exigido se você usar a palavra-chave Alias.Seqüência de caracteres que identifica o procedimento em uma das seguintes maneiras:O nome de ponto de entrada do procedimento dentro de seu arquivo entre aspas ("")
- ou -
Um sinal numérico (#) seguido por um inteiro especificando o número ordinal do ponto de entrada do procedimento dentro de seu arquivo
parameterlist
Necessário se o procedimento usa parâmetros.SeeLista de parâmetros.returntype
Necessário se Function especificada e Option Strict é On. Tipo de dados de valor retornado pelo procedimento.
Comentários
Às vezes você precisa chamar um procedimento definido em um arquivo (por exemplo, um DLL ou recurso de código) fora seu projeto.Quando você fizer isso, o compilador do Visual Basic não tem acesso às informações necessárias para chamar o procedimento corretamente, sistema autônomo onde está o procedimento, sistema autônomo é identificado, sua sequência de telefonar e tipo de retorno e o conjunto de caractere da sequência de caractere usa.The Declare demonstrativo cria uma referência a um procedimento externo e fornece essas informações necessárias.
Você pode usar Declare somente no nível de módulo. Isso significa que o declaração de contexto para uma referência externa deve ser uma classe, estrutura ou módulo e não pode ser um arquivo de fonte, namespace, interface, procedimento ou bloco.Para obter mais informações, consulte Declaração de contextos e níveis de acesso padrão.
Padrão, as referências externasPúblico (Visual Basic) acesso. Você pode ajustar os níveis de acesso com os modificadores de acesso.
Regras
Atributos. Você pode aplicar atributos a uma referência externa.Qualquer atributo que você aplicar tem efeito somente no seu projeto, e não no arquivo externo.
Modificadores Procedimentos externos são, implicitamente, Compartilhamento (Visual Basic). Não é possível usar o Shared palavra-chave quando declarar uma referência externa e não é possível alterar seu status compartilhado.
Um procedimento externo não pode participar de substituição, implementar membros de interface ou manipular eventos.Da mesma forma, não é possível usar o Overrides, Overridable, NotOverridable, MustOverride, Implements, ou Handles palavra-chave em um Declare demonstrativo.
Nome do procedimento externo. Não é necessário dar esta referência externa o mesmo nome (em name) sistema autônomo nome de ponto de entrada do procedimento dentro de seu externos de arquivos ()aliasname). Você pode usar um Alias cláusula para especificar o nome do ponto de entrada. Isso pode ser útil se o procedimento externo tem o mesmo nome sistema autônomo um modificador reservado do Visual Basic ou uma variável, procedimento ou qualquer Outros elemento de programação no mesmo escopo.
Observação: Os nomes de ponto de entrada na maioria das DLLs diferenciam diferenciar maiúsculas de minúsculas.
Número de procedimento externo. Como alternativa, você pode usar um Alias cláusula para especificar o número ordinal do ponto de entrada dentro da tabela de exportar do arquivo externo. Para fazer isso, começar a aliasname com um número de entrada)#). Isso pode ser útil se qualquer caractere no nome do procedimento externo não é permitido no Visual Basic, ou se o arquivo externo exporta o procedimento sem nome.
Regras de Tipo de Dados
Tipos de Dados de Parâmetro. If Option Strict é On, você deve especificar o tipo de dados de cada parâmetro em parameterlist. Isso pode ser qualquer tipo de dados ou o nome de uma enumeração, estrutura, classe ou interface.Dentro de parameterlist, você usar um As cláusula para especificar o tipo de dados do argumento a ser passada para cada parâmetro.
Observação: Se o procedimento externo não foram gravado para o .NET estrutura, você deve observar que correspondem os tipos de dados.Por exemplo, se você declarar uma referência externa para um procedimento do Visual Basic 6.0 com uma Integer parâmetro (16 bit no Visual Basic 6.0), você deve identificar o argumento correspondente sistema autônomo Short no Declare demonstrativo, pois é o tipo inteiro de 16 bit no Visual Basic. Da mesma forma, Long tem uma largura de dados diferente no Visual Basic 6.0, e Date é implementada de forma diferente.
Retorne o tipo de dados. Se o procedimento externo é um Function e Option Strict é On, você deve especificar o tipo de dados do valor retornado para o código de chamada. Isso pode ser qualquer tipo de dados ou o nome de uma enumeração, estrutura, classe ou interface.
Observação: O compilador do Visual Basic não verifica se seus tipos de dados são compatível com os do procedimento externo.Se houver uma incompatibilidade, o common linguagem tempo de execução gera um MarshalDirectiveException exceção em time de execução.
Tipos de dados padrão. If Option Strict é Off e você não especificar o tipo de dados de um parâmetro em parameterlist, o compilador do Visual Basic converte o argumento correspondente para o Tipo de dados Object. Da mesma forma, se você não especificar returntype, o compilador leva o tipo de dados de retorno a ser Object.
Observação: Porque você está lidando com um procedimento externo pode ter sido escrito em uma plataforma diferente, é perigoso para fazer suposições sobre os tipos de dados ou permitir que eles padrão.É muito mais seguro especificar o tipo de dados de cada parâmetro e o valor retornado, se houver.Isso também melhora a legibilidade do código.
Comportamento
Escopo. Uma referência externa está no escopo em toda a sua classe, estrutura ou módulo.
Tempo de vida. Uma referência externa tem o mesmo tempo de vida sistema autônomo a classe, estrutura ou módulo em que é declarado.
Chamando um procedimento externo. Você chamar um procedimento externo da mesma forma que você chamar um Function ou Sub procedimento — usando-o em uma expressão se ela retorna um valor ou especificando-lo em um Chamar demonstrativo (Visual Basic) Se ele não retornará um valor.
Você passar argumentos para o procedimento externo exatamente conforme especificado por parameterlist no Declare demonstrativo. Não levam em conta como os parâmetros foram originalmente declarados no arquivo externo.Da mesma forma, se houver um valor retornado, usá-lo exatamente sistema autônomo especificado por returntype no Declare demonstrativo.
Conjuntos de caractere. Você pode especificar em charsetmodifier como Visual Basic deve realizar marshaling em cadeias de caracteres quando chama o procedimento externo. The Ansi modificador instrui o Visual Basic para realizar marshaling em todas as cadeias de caracteres em valores ANSI e o Unicode modificador direciona-o para realizar marshaling em todas as cadeias de caracteres em valores Unicode. The Auto modificador instrui o Visual Basic para realizar realizar marshaling strings para de acordo com regras do .NET estrutura com base em referência externa name, ou aliasname Se especificado. O valor padrão é Ansi.
charsetmodifier também especifica como Visual Basic deve pesquisar o procedimento externo em seu arquivo externo. Ansi e Unicode ambos direcionam do Visual Basic para procurá-lo sem modificar seu nome durante a Pesquisar. Auto direciona Bsistema autônomoic Visual para determinar o conjunto de caractere bsistema autônomoe da plataforma de time de execução e possivelmente modificar o nome do procedimento externo, sistema autônomo segue:
Em uma plataforma de ANSI, sistema autônomo Windows 95, Windows 98 ou Windows Millennium edição, primeiro Pesquisar o procedimento externo com nenhuma modificação do nome.Se isso falhar, acrescentar "A" ao participante do nome do procedimento externo e procurá-lo novamente.
Em uma plataforma Unicode, sistema autônomo Windows NT, Windows 2000 ou Windows XP, primeiro consulte o procedimento externo com nenhuma modificação do nome.Se isso falhar, acrescentar "W" ao participante do procedimento externo nomear e procurá-lo novamente.
Mecanismo. Visual Basic usa o.NET estrutura invocação de plataforma Mecanismo (PInvoke) para resolver e acesso a procedimentos externos.The Declare demonstrativo e o DllImportAttribute classe ambas use esse mecanismo automaticamente e não é necessário qualquer conhecimento de PInvoke. Para obter mais informações, consulte Demonstra Passo a passo: Chamando as APIs do Windows.
Observação de segurança: |
---|
Se o procedimento externo for executado fora o common linguagem tempo de execução (CLR), é código não gerenciado.Ao chamar tal um procedimento, por exemplo, uma função da API do Win32 ou um método COM, você poderá expor seu aplicativo a riscos de segurança.Para obter mais informações, consulte Código não gerenciado. |
Exemplo
O exemplo a seguir declara uma referência externa para um Function procedimento que retorna o nome do usuário corrente. Em seguida, ele chama o procedimento externo GetUserNameA sistema autônomo parte do getUser procedimento.
Declare Function getUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Sub getUser()
Dim buffer As String = New String(CChar(" "), 25)
Dim retVal As Integer = getUserName(buffer, 25)
Dim userName As String = Strings.Left(buffer, InStr(buffer, Chr(0)) - 1)
MsgBox(userName)
End Sub
The DllImportAttribute Fornece uma maneira alternativa de utilização de funções em código não gerenciado. O exemplo a seguir declara uma função importada sem usar um Declare demonstrativo.
' Add an Imports statement at the top of the class, structure, or
' module that uses the DllImport attribute.
Imports System.Runtime.InteropServices
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function moveFile(ByVal src As String, _
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to moveFile to be forwarded to MoveFileW in KERNEL32.DLL.
End Function
Consulte também
Tarefas
Demonstra Passo a passo: Chamando as APIs do Windows
Conceitos
Alterações nos tipos de dados para usuários do Visual Basic 6.0
Tipo de dados inteiros para usuários do Visual Basic 6.0
Referência
Declaração Imports (Tipo e Namespace .NET)
Instrução Function (Visual Basic)
Sub-rotina demonstrativo (Visual Basic)