__stdcall (Para que serve?)

Olá galera,

Estou estudando c++ e surgiu uma dúvida, eu recentemente tenho me deparado muito com uma palavra chave chamada __stdcall e não entendo qual a finalidade dela. Pelo que andei lendo por ae, vi que essa palavra funciona como uma diretiva para o processador tratar as variáveis que estão sendo passadas por uma função de forma diferente na PILHA (memória), mas diferente como?

Exemplo: VARRETORNO __stdcall nomeFunction(int var1, int var2, int *var3);

Então simplificando, qual a diferença de usar o __stdcall e não usar? Quanto mais detalhes melhor.

Será que alguém conseguiria me ajudar?

Historicamente existem varias formas de chamar uma função (quem limpa a stack? Qual a ordem dos parâmetros? Quais registradores usa?)

Se vc quer interoperacionalidade entre codigo binario escrito em diferentes linguagens, ou usar APIs especificas, precisa saber estes modificadores.

Este texto cobre quase todos os diferentes modelos

Perceba que alguns estão relacionados a WINAPI, outros a COM, Pascal, etc

1 curtida

Pelo que eu entendi, algumas API’s, bibliotecas de DLL e outras coisas “simplesmente necessitam” de alguma ordem na hora de passar os parâmetros para o stack, mas na verdade, do ponto de vista do programador, se não importar a forma que o parâmetro vai para o stack, tanto faz se eu usar o __stdcall, __fastcall, __pascal ou __cdecl… Vou parar de esquentar a cabeça com isso… Já respondi minha dúvida.

Obrigado =)))))

Tanto faz não.

Portabilidade e Performance são afetados. Mas 99% da pra usar o padrão

Não quis dizer que não importa =)

Achei um documento interessante que fala sobre isso também, se alguém precisar dar uma olhada (Ta em inglês):
http://www.agner.org/optimize/calling_conventions.pdf

eu entendi. estava com sono tb quando expliquei. foi interessante pq eu sempre tive essa duvida e achava que a forma de invocar uma subrotina era a mesma sempre.