Chamar funções DLL de aplicativos Visual Basic

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

__stdcall cria 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 a 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.

The __stdcall decoração de nome prefixos o nome do símbolo com um sublinhado (_) e anexa o símbolo com um arroba (@) caractere, seguido do número de bytes na lista de argumentos (o espaço de pilha necessário). sistema autônomo resultado, a função quando declaradas sistema autônomo:

int __stdcall func (int a, double b)

é decorado sistema autônomo:

_func@12

A convenção C de chamada (__cdecl) decora o nome sistema autônomo _func.

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

  • Se a função é exportada com a convenção C de chamada (_cdecl), ele remove o sublinhado (_) entrelinhamento quando o nome é exportado.

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

Como não é possível substituir onde ocorre a limpeza da pilha, você deve usar __stdcall. Para nomes com undecorate__stdcall, você deve especificá-los usando aliases na seção EXPORTS do arquivo .def. Isso é mostrado sistema autônomo segue 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 é concluído no programa do Visual Basic, o uso de alias no arquivo .def não é necessário.Isso pode ser concluído no programa do Visual Basic, adicionando uma cláusula de alias ao Declarar demonstrativo.

O que você deseja saber mais sobre?

Consulte também

Conceitos

DLLs