Chamar funções DLL de aplicativos Visual Basic
Para aplicativos de Visual Basic (ou aplicativos em outras linguagens 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 qualquer 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 maneira diferente.Assim, quando __declspec(dllexport) é usado em uma função exportada em uma DLL, o nome decorado é exportado.
O __stdcall decoração de nome prefixos o nome do símbolo com um sublinhado (_) e acrescenta o símbolo com uma arroba (@) caractere seguido do número de bytes na lista de argumentos (o espaço de pilha necessário).Como resultado, a função quando declaradas como:
int __stdcall func (int a, double b)
é decorado como:
_func@12
A convenção c de chamada (__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 sublinhado (_) à esquerda quando o nome é exportado.
Se a função sendo exportada não usar a convenção c de chamada (por exemplo, __stdcall), ele exporta o nome decorado.
Porque não há nenhuma maneira de substituir onde ocorre a limpeza de pilha, você deve usar __stdcall.Para nomes com undecorate __stdcall, você deve especificá-los usando aliases na seção do arquivo. def exportações.Isso é mostrado a seguir para a declaração de função a seguir:
int __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);
Na.Arquivo DEF:
EXPORTS
MYFUNC=_MyFunc@12
INITCODE=_InitCode@0
Para DLLs a 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 Visual Basic, adicionando uma cláusula de alias para o Declare instrução.