Pesquisar este blog

terça-feira, 22 de outubro de 2013

DECLARE

Declare


    Instrução empregada apenas ao nível do módulo para referenciar procedimentos externos contidos em DLLs (Dynamic Link Library), utilizando estas sintaxes:

[Public |Private] Declare Sub Nome Lib “DLL” [Alias “Apelido”] [(Args)]
[Public |Private] Declare Function Nome Lib “DLL” [Alias “Apelido”] [(Args)] [As Tipo]


Onde os argumentos são:
  • Public: Argumento opcional empregado apenas ao nível de módulo para declarar procedimentos públicos (disponíveis para todos os procedimentos de todos os módulos de aplicativo). Não pode ser empregada no interior de um procedimento;
  • Private: Argumento opcional empregado apenas ao nível de módulo para declarar procedimentos privados (disponíveis apenas para os procedimentos existentes no módulo atual). Não pode ser empregada no interior de um procedimento;
  • Sub: Argumento opcional que indica que o procedimento não retorna um valor;
  • Function: Argumento opcional que indica que o procedimento retorna um valor, o qual pode ser empregado em uma expressão;
  • Nome: Argumento obrigatório que indica o nome do procedimento a ser executado existente na DLL. Os nomes de procedimentos são sensíveis à capitalização das letras;
  • Lib: Argumento obrigatório, indica que uma DLL contém o procedimento declarado;
  • DLL: Argumento obrigatório, indica o nome do arquivo (arquivo.DLL) que contém o procedimento declarado;
  • Alias: Argumento opcional, indica que o procedimento será chamado utilizando-se um apelido. Este artifício é útil para evitar conflitos de nomes de procedimentos existentes em DLL como nome de variáveis públicas, constantes ou funções do VBA;
  • Apelido: Argumento opcional, indica que o nome real do procedimento no interior da DLL. Se o primeiro caractere não for um sinal numérico (#), o nome do apelido será o mesmo nome existente na DLL. Caso o primeiro caractere seja #, todos os caracteres que o precedem indicam a posição do procedimento dentro da DLL;
  • Args: Argumento opcional, indica a lista de argumentos esperados pelo procedimento a ser executado pela DLL. A lista de argumentos Args possui a seguinte sintaxe:
[ArgumentoOpcional] {ByVal |ByRref] [ParamArray] Variável [()] [As Tipo]

Onde:
    • ArgumentoOpcional: Indica um argumento não obrigatório. Porém se o argumento for utilizado, todos os demais argumentos na lista de argumentos também deverão ser opcionais, declarados com palavra-chave Optional;
    • ByVal: Argumento opcional que indica que o argumento é passado por valor;
    • ByRef: Indica que o argumento é passado por referência (padrão do VBA);
    • ParamArray: Argumento opcional, empregado apenas como o último argumento da lista, indicando que o argumento é uma matriz ou Variant contendo uma matriz de elementos. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos, não podendo ser empregada com Byval, ByRef ou Optional;
    • Variável: Argumento obrigatório, indica o nome da variável a ser passada para o procedimento;
    • (): Argumento obrigatório para variáveis matrizes, indicando que o nome do argumento é uma matriz;
    • Tipo: Argumento opcional, indica o tipo do argumento passado para o procedimento, podendo ser Byte, Boolean, Integer, Long, Curreny, Single, Double, Date, String (de comprimento variável), Object, Variant, um tipo definido pelo usuário ou um tipo de objeto;
As seguintes considerações são válidas para a instrução Declare:
  • Quando especificar o tipo de dado na lista de argumentos, você podará utilizar o tipo As Any para inibir a verificação de tipo durante a chamada do procedimento (qualquer tipo pode ser passado, porém, se você não empregar o tipo esperado pelo procedimento existente na DLL, um erro fatal poderá ocorrer retirando o sistema do ar);
  • Parênteses vazios indicam que o procedimento não possui qualquer argumento a ser passado;
  • Você não pode declarar uma String de comprimento fixo na lista de argumentos. Porém, como muitas DLLs retornam dados e valores em strings, é comum declarar uma string de comprimento fixo fora da instrução Declare e passa-la por referência para o procedimento existente na DLL;
  • A constante VBNullString é empregada ao se chamar procedimentos em DLL que exigem que a string tenha um valor Nulo (strings terminadas como caractere Null). Esta opção é diferente do emprego de “” (string vazia);
  • Módulos Classe permitem apenas o emprego de instruções Declare privadas (utilizando a instrução Private)

Exemplo: O próximo exemplo indica como utilizar a função Declare para declarar procedimentos em DLLs em um módulo do VBA, utilizando DLLs de 16 e 32 bits (DLLs de 16 bits podem ser acessadas apenas em aplicativos 16 bits, como o Microsoft Access versão 2 e Visual Basic 4 16 bits):

‘Usando Microsoft Windows 16-bits
Declare Sub MeuBeep Lib “User.DLL” Alias “MessageBeep” (ByVal N As Integer)
‘Usando Microsoft Windows 32-bits
Declare Sub MeuBeep Lib “User32.DLL” Alias “MessageBeep” (ByVal N As Integer)
‘ Use a posição original do procedimento dentro da DLL.
Declare Function GetWinFlags Lib “Kernel” Alias “#132” () As Long

Até a Próxima!!

Nenhum comentário:

Postar um comentário