Cdecl ou StdCall qual usar ?


Todas as DLLs ACBrLibxxx vem em dois formatos Cdecl e StdCall, mas você deve estar se perguntando qual delas utilizar ? o que seria cdecl e stdcall ?, Neste tópico vamos abordar um pouco sobre isso.


O que seria Cdecl e StdCall ?


Cdecl e StdCall são Convenção de chamada de funções ou seja são a forma que o seu programa deve chamar as funções e processar o retorno da biblioteca .

       

Em ciência da computaçãoconvenção de chamadas de função é um esquema o qual as funções de um programa recebem parâmetros das funções chamadoras e como elas retornam um resultado. Essas convenções diferem de acordo com as linguagens de programação, os sistemas operacionais e CPUs.

       

Como pode ver existem varias convenções as mais usadas são cdecl e stdcall.

Convenção de chamada Cdecl


Cdecl é uma convenção de chamada padrão para programas em C e C++ nesta convenção a pilha é limpa pelo chamador. O Cdecl cria executáveis maior que stdcall, porque requer que cada chamada de função tenha incluso o código de limpeza de pilha, apesar disso nos sistemas Unix(s), Linux, é a convenção padrão de uso.        


Convenção de chamada Stdcall


A convenção de chamada Stdcall é usada para chamar funções da API do Win32, sendo a convenção de chamada padrão de sistemas Windows. Nesta convenção o receptor limpa a pilha diferente do Cdecl. As funções que usam esta convenção de chamada exigem um protótipo de função.

Mas e ai qual devo usar ?


Como você pode ver nos tópicos anteriores a convenção de chamada depende do sistema operacional e da linguagem de programação, então você deve verificar qual o sistema que você vai usar e qual a linguagem de programação que vai ser utilizada para definir qual convenção. Ex.:


  • Visual Basic: Usa apenas StdCall.
  • Visual Basic .Net: Usa Cdecl ou StdCall.
  • C#: Usa Cdecl ou StdCall.
  • Java - JNA: Usa apenas StdCall ou Cdecl no windows e apenas Cdecl no Linux.

Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor