DLL escrita em C++

Uma vez estava fazendo manutenção em um sistema e existia uma DLL escrita em C++, precisava chamar esta DLL por dentro do Visual Basic, para minha surpresa quando iniciava o projeto dava erro ‘Bad dll calling convention’, mas quando o projeto estava compilado funcionava perfeitamente. Então resolvi cair dentro do imenso mar de fóruns da web. Foi quando encontrei em um site que dizia o seguinte, quando um desenvolvedor escreve uma DLL em C++ pode informar que programas ou controles, que usarem a biblioteca se encarregam de esvaziar a pilha de memória ou a biblioteca faz isso. O erro acontece por que o Visual Basic não consegue esvaziar esta pilha de memória no modo de desenvolvimento.

Alguns compiladores abaixo mostram o padrão que eles seguem:

  • O Visual Studio C++ (Coloca o esvaziamento de pilha para os programas que chamarem a DLL – Padrão)
  • O Builder C++ (Coloca a DLL para esvaziar a pilha de memória – Padrão)


Exemplo de como passar DLL esvaziar a pilha de memória no Visual Studio C++

Primeiro precisamos começar um projeto de DLL Dinâmica, existe um arquivo com extensão DEF que colocaremos o nome da função, para outras linguagens acessem nossa DLL.
Exemplo de uma função:

int __stdcall nomefuncao(){
….
}

para maiores detalhes sobre __stdcall acesse:

http://support.microsoft.com/kb/100832/pt

Deixar uma resposta