Compartilhar via


Chamar funções DLL de aplicativos de Visual Basic

Para aplicativos de Visual Basic (ou aplicativos em outros idiomas como Pascal ou Fortran) chamar funções em uma DLL de C/C++, as funções devem ser exportadas usando a convenção de chamada correta sem quaisquer decoração de nome feita pelo compilador.

__stdcallcria a convenção de chamada correta para a função (a função chamada limpa a pilha e parâmetros são passados da direita para esquerda), mas decora o nome da função de forma diferente. Quando isso ocorrer, __declspec(dllexport) é usado em uma função exportada em uma DLL, o nome decorado é exportado.

O __stdcall a decoração de nome prefixos o nome do símbolo com um sublinhado (_) e anexa o símbolo com uma arroba (@) caracteres, seguido do número de bytes na lista do argumento (o espaço de pilha necessária). Como resultado, a função quando declaradas como:

int __stdcall func (int a, double b)

é decorado como:

_func@12

A convenção de chamada C (__cdecl) decora o nome como _func.

Para obter o nome decorado, use /MAP. Uso de __declspec(dllexport) faz o seguinte:

  • Se a função será exportada com a convenção de chamada C (_ cdecl), ele retira o caractere de sublinhado (_) à esquerda quando o nome é exportado.

  • Se a função que está sendo exportada não usa a convenção de chamada C (por exemplo, __stdcall), ele exporta o nome decorado.

Porque não há nenhuma maneira para substituir onde a limpeza de pilha ocorre, você deve usar __stdcall. Para undecorate os nomes com __stdcall, você deve especificá-los usando o alias na seção EXPORTA o arquivo. def. Isso é mostrado a seguir para a declaração de função a seguir:

int  __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);

No.Arquivo DEF:

EXPORTS
   MYFUNC=_MyFunc@12
   INITCODE=_InitCode@0

Para DLLs deve ser chamado por programas escritos em Visual Basic, a técnica de alias mostrada neste tópico é necessária no arquivo. def. Se o alias é feito no programa de Visual Basic, não é necessário o uso de alias no arquivo. def. Pode ser feito no programa de Visual Basic, adicionando uma cláusula de alias para o Declare instrução.

O que você deseja saber mais a respeito?

Consulte também

Conceitos

DLLs