__stdcall ??

Signaler
Messages postés
24
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
3 août 2004
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Salut,

Bon juste une petite question, je voudrais savoir à quoi cela sert de mettre __stdcall dans l'en-tête d'une fonction juste avant le nom de la fonction? Désolé si ma question est un peu con mais j'ai cherché dans MSDN et j'ai rien trouvé qui m'éclaire. :sad)

Une autre petite question : Si j'ai stdafx.h inclus, j'ai des trucs qui marchent pas comme par exemple ShellExecute(...);
ou encore une structure OPENFILENAME. Je vois pas trop le rapport avec Stdafx.h mais bon...

Merci d'avance à tous ceux qui pourrons m'aider simplement
bye
~~ Fada ~~ ;)

10 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
__fastcall ca permet d'accelerer l'appel de ta fonction quand celle ci a des parametres

sinon #include <windows.h>
Messages postés
24
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
3 août 2004

Tout d'abord merci d'avoir répondu.

Pour __fastcall tu le met dans toutes les fonctions ???

J'ai fait l'include windows.h (en premiere position dans mes includes en plus) et ça marchait toujours pas. Enfin c'est pas grave si je vire stdafx.h plus de pbs

~~ Fada ~~ ;)
Messages postés
24
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
3 août 2004

Tout d'abord merci d'avoir répondu.

Pour __fastcall tu le met dans toutes les fonctions ???

J'ai fait l'include windows.h (en premiere position dans mes includes en plus) et ça marchait toujours pas. Enfin c'est pas grave si je vire stdafx.h plus de pbs

~~ Fada ~~ ;)
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
stdcall
fastcall
cdecl

pour windows, utiliser WINAPI (qui est un alias de __stdcall)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
met le sur les fonctions qui ont des parametres seulement si il ya reel besoin de vitesse, mais n'en abuse pas car g crois que ca bouffe du registre cpu (lol, faudrait que g verifi)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oula, g vient de remarquer aque g repondait a coter, g confondu __stdcall et __fastcall, desolé
Messages postés
24
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
3 août 2004

Merci a tous !!
enfin j'y vois un peu plus clair :)

Reste plus que le pb de stdafx.h que je comprends pas mais c'est pas bien grave je vais continuer a chercher

Encore merci
~~ Fada ~~ ;)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
lors de l'appel à une fonction qui prend des paramètres, il y à 2 façons de les lui donner :
- par les registres (__fastcall).
- par la pile (__sdtcall, __cdecl).

lors du passage de paramètres par la pile, il y a donc 2 cas:
__stdcall : c'est la fonction appelée qui se charge de dépiler les paramètres lors du retour.
__cdecl : c'est la fonction qui appelle sui se charge de dépiler.

donc lorsqu'une fonction est __stdcall, il faut lui donner le bon nombre de paramètres sinon ça plante.

losqu'une fonction est __cdecl, on peut lui-donner un nombre quelconque de paramètres (comme les fct printf).
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
mais c'est pas ansi ca?

en ansi pour gerer un nombre variable de parametre il faut definir un prototyoe comme ca

int f(int a, int b, ...);

a et b sont les parametres nommé, suivi d'un nombre variable de parametres effectifs

pour acceder a ces parametres on se sert des macros va_start et va_arg definie dans stdarg.h
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
__cdecl est la convention d'appel par défaut du des fonctions en C (le mot clé lui est peut -être spécifique au compilo mais ca se trouve dans les options normalement)