Signature d'une méthode [C Windows] - C - Programmation
Marsh Posté le 15-07-2003 à 15:04:52
Ben y'a pas grand chose de particulier la...
Pe fais tu reference au CRPE_API qui decrit la convention d'appel de fonction (ordre d'empilement des parametres, menage de la pile a la charge de l'appelant ou de l'appelé etc etc)
ou y'a encore autre chose ?
Marsh Posté le 15-07-2003 à 15:17:32
Il s'agit bien du mot clé CRPE_API, je suppose que c'est un mot clé propre à l'outil que j'utilise : Crystal Reports.
Comment s'appelle ce genre de mot clés, qui s'intercale entre type de retour et nom de la fonction ?
Est-ce obligatoire ? Dois-je m'en préoccuper ?
Marsh Posté le 15-07-2003 à 15:22:30
Cherrytree a écrit : Il s'agit bien du mot clé CRPE_API, je suppose que c'est un mot clé propre à l'outil que j'utilise : Crystal Reports. |
A ma connaissance il y a trois convention d'appels :
cdecl
stdcall
fastcall
(thiscall mis de coté)
Ton CRPE_API est un #define d'un de ces trois la (cdecl ou stdcall a mon idee).
Maintenant, pour toi, qu'est ce que ca change ? rien. C'est la tambouille interne de CR, a priori ils ont mis ca pour etre bien sur que les fonctions utiliseront la convention d'appels qu'ils ont choisi plutot que celle que le compilo utilise par defaut.
Par contre, si jamais une des fonctions de Crystal report (que je ne connais pas du tout) te demande en parametre un pointeur sur une fonction callback, prends bien garde a lui donner une fonction utilisant la meme convention d'appel que ce qu'il attends.
(le nom de ce genre de mot cle m'echappe completement)
Marsh Posté le 15-07-2003 à 15:25:52
ReplyMarsh Posté le 15-07-2003 à 15:43:32
chrisbk a écrit : |
C'est quoi les différences, excepté l'ordre dans lequel on empile les parametres?
Marsh Posté le 15-07-2003 à 15:48:04
Ace17 a écrit : |
cdecl : param empile de droite a gauche, menage de la pile a la charge de l'appelant
stdcall : param empile de droite a gauche, menage de la pile a la charge de l'appelé
fastcall : passage autant que possible via registre, le reste sur la pile, menage a la charge de roger (en fait je sais pu )
Il ne me semble pas qu'il y ait des differences au niveau des retours de fonction (entier : AL/AX/EAX, voir EDX:EAX, reel : st(0), struct : pointeur "invisible" filé en entrée sur la pile et EAX)
Marsh Posté le 15-07-2003 à 18:10:29
Moi je pencherais plutôt pour une macro d'import / export de fonctions. Un truc du genre :
Code :
|
c'est un header fourni avec une dll ?
Le plus simple, ca reste quand meme de regarder comment est défini CRPE_API ...
Marsh Posté le 16-07-2003 à 14:27:05
HelloWorld a écrit : Moi je pencherais plutôt pour une macro d'import / export de fonctions. Un truc du genre :
|
Il y a une DLL : CRPE32.DLL, mais que puis-je apprendre à son sujet ? C'est compilé, non ?
Marsh Posté le 16-07-2003 à 14:29:48
Cherrytree a écrit : |
faudrait que tu creuses un peu pour trouver ce quoi correspond CRPE_API.
Soit c'est un truc comme j'ai decris plus haut, soit c une explication a la helloworld (qui signifie que tu t'en fous encore plus, c juste pour dire au compilo que la fonction est importée d'une dll)
Marsh Posté le 16-07-2003 à 15:12:34
Donc tu as une dll ...
Le fichier .h est là pour te permettre de l'utiliser.
__declspec( dllimport ) ça indique au compilo que les fonctions elles sont contenues dans cette dll. Il se charge de générer le code qu'il faut pour s'y lier.
+ d'infos ici :
http://www.codeproject.com/dll/dllexport.asp
Marsh Posté le 15-07-2003 à 14:54:45
J'ai remarqué que certaines méthodes avaient une signature particulière.
BOOL CRPE_API PEOutputToPrinter (short printJob, short nCopies );
Qu'est ce que cela signifie ?
---------------
Le site de ma maman