INFO: requisitos de Visual Basic para funções exportadas DLL

Traduções de Artigos Traduções de Artigos
Artigo: 142840 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Para utilizar uma função a partir de uma DLL exportada num programa do Visual Basic, determinados requisitos devem ser cumpridos para a função a ser utilizado com êxito pelo Visual Basic. Visual Basic espera esta função DLL exportada para funcionar como uma chamada de API do Windows. Este artigo resume os requisitos do Visual Basic e alguns dos requisitos se estiver a criar a suas próprias DLL exportado.

Mais Informação

Uma das funcionalidades do Visual Basic é a capacidade para utilizar uma função armazenada numa DLL. Visual Basic parte do princípio que as funções DLL exportadas têm os mesmos atributos como uma função de API do Windows. Para utilizar uma função a partir de uma DLL exportada num programa do Visual Basic, Visual Basic requer o seguinte:

Requisitos para chamar funções

  • Os argumentos são transmitidos da direita para a esquerda: argumentos são transmitidos pelo valor a menos que especifique um tipo de ponteiro ou referência.

  • Passar argumentos por valor ou por referência - por predefinição: Visual Basic passa todos os argumentos por referência; os argumentos passados por referência contenham o endereço de 32 bits que contém o argumento em vez do valor do argumento. No entanto, a maior parte das funções numa DLL exportada esperar que o valor do argumento em vez do endereço de 32 bits. Para passar um argumento por valor, utilize a palavra-chave ByVal.

  • Manutenção da pilha é tratada pela função chamada.
  • Caso a confidencialidade do nome: em Win16, nomes de funções não são sensíveis. No Win32, nomes de função agora são sensíveis a maiúsculas e minúsculas. Se tentar chamar uma função utilizando um nome que é a letra semelhantes, mas caso diferentes da função armazenados numa DLL exportada, ocorrerá um erro de tempo de execução porque o nome da função não existe.

    Por exemplo, User32.dll tem um nome de função chamado GetSystemMetrics devolve informações sobre o ambiente do Windows. Utilizando a seguinte instrução para chamar esta função declarar:
          Declare Function GETSYSTEMMETRICS% Lib "User" ByVal nIndex%)
    
    						
    Resulta num erro de tempo de execução porque a função GETSYSTEMMETRICS não está na User32.dll.

    Para evitar erros causados escrevendo incorrectamente o nome da função, atribua um alias para o nome de função. Por exemplo, pode atribuir o alias GetWindowsEnv para a função GetSystemMetrics utilizando o seguinte declarar instrução:
          Declare Function GetWinEnv Lib "User32" Alias GetSystemMetrics _
                           (ByVal int1 As Integer) As Integer.
    
    						

Notas sobre criar DLL exportada no Visual C++

Esta secção fornece algumas informações para criar uma DLL exportada que cumpra os requisitos do Visual Basic utilizando o Microsoft Visual C++. Outros compiladores C++ podem ou poderão não suportar as palavras-chave utilizadas nesta secção.

Visual Basic requer que a função receber os argumentos também mantêm a pilha. A palavra-chave Visual C++ pode efectuar a manutenção de pilha correcto é _stdcall.

A palavra-chave _stdcall decora o nome da função com um carácter de sublinhado anterior e anexa '@ n' em que n é o número de bytes necessários para conter os argumentos da função e o valor devolvido. Por exemplo, se criar uma função designada por GetWindowSize e utilizar a palavra-chave _stdcall para fornecer a pilha de manutenção, a função é definida da seguinte forma:
   int GetWindowSize (int nIndex)
				

Segue-se o nome exportado resultado:
   _GetWindowSize@8
				

Tenha em atenção o carácter de sublinhado anterior é adicionado pela palavra-chave _stdcall.

Para exportar o ficheiro, pode utilizar a palavra-chave _declspec(dllexport) ou um ficheiro DEF EXPORT secção. A palavra-chave _declspec(dllexport) exporta a função mas mantém a decoração de nomes. O exemplo seguinte mostra como implementar o _declspec(dllexport) _stdcall e palavra-chave numa função chamada DisplayMessage:
   _delcspec(dllexport) long _stdcall DisplayMessage (LPSTR szMessage)
				

Um ficheiro DEF também exporta o nome da função e remove a decoração de nomes. O exemplo seguinte mostra como a secção EXPORT de um ficheiro DEF é implementada para uma função designada por DisplayMessage:
   EXPORTS
      DisplayMessage
				

Referências

Vb4dll.txt incluído no Visual Basic.

Visual Basic 'do Visual Basic Programmer Guide, capítulo 26, "chamar procedimentos na DLL"

Propriedades

Artigo: 142840 - Última revisão: 1 de março de 2014 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbinfo KB142840 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 142840

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com