2010-11-27 42 views
1

Ok, je vais donner deux exemples de fonction utilise CALLBACK et la fonction régulière.
Remarque: Je n'ai pas écrit ces exemples.Quelle est la différence entre la fonction de rappel et la fonction normale?

Fonction régulière

int sumExample (int a, int b) 
{ 
    return a + b; 
} 
int main() 
{ 
    int = sumExample(1, 3); 
    cout >> int; 
    return 0; 
} 

Fonction utilisant _stdcall

int __stdcall sumExample (int a, int b); 

quelle est la différence?
Remarque: Je ne suis pas sûr de la façon dont les conventions d'appel fonctionnent, un exemple serait utile!

Répondre

2

Fondamentalement, une convention d'appel spécifie les détails d'implémentation de la façon dont la fonction sera appelée. La plupart des bibliothèques utilisent la convention d'appel Standard C - __cdecl. WinAPI s'attend cependant à __stdcall. Vous devez seulement connaître deux choses à propos des conventions d'appel: qu'elles doivent correspondre, par exemple, vous ne pouvez pas convertir un void(*)(int, int), qui est implicitement un void(__cdecl *)(int, int), en void(__stdcall *)(int, int), et que la valeur par défaut est __cdecl. CALLBACK est juste une définition de WinAPI #define afin qu'ils puissent changer s'ils le veulent.

+0

Eh bien, ils ne peuvent pas changer CALLBACK parce que cela casserait tous les programmes, mais ce qu'ils peuvent faire est #ifdef pour signifier quelque chose d'autre sur une autre plate-forme (par exemple Alpha, MIPS etc.) –

2

Pas beaucoup, vraiment. Un "callback" est un nom donné à une fonction à transmettre à une autre fonction qui le "rappellera" quand ... quelque chose d'utile arrive. Il n'y a aucune raison pour que cela ne puisse pas être utilisé comme une fonction régulière.

+0

Pourquoi le downvote? Je suis d'accord. –