[C Windows] Signature d'une méthode

Signature d'une méthode [C Windows] - C - Programmation

Marsh Posté le 15-07-2003 à 14:54:45    

J'ai remarqué que certaines méthodes avaient une signature particulière.

Citation :

BOOL CRPE_API PEOutputToPrinter (short printJob, short nCopies );


Qu'est ce que cela signifie ?


---------------
Le site de ma maman
Reply

Marsh Posté le 15-07-2003 à 14:54:45   

Reply

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 ?

Reply

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 ?


---------------
Le site de ma maman
Reply

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.
 
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 ?


 
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)


Message édité par chrisbk le 15-07-2003 à 15:23:39
Reply

Marsh Posté le 15-07-2003 à 15:25:52    

Merci beaucoup pour ta peine et mon information.


---------------
Le site de ma maman
Reply

Marsh Posté le 15-07-2003 à 15:43:32    

chrisbk a écrit :


A ma connaissance il y a trois convention d'appels :
 
cdecl
stdcall
fastcall
(thiscall mis de coté)


 
C'est quoi les différences, excepté l'ordre dans lequel on empile les parametres?

Reply

Marsh Posté le 15-07-2003 à 15:48:04    

Ace17 a écrit :


 
C'est quoi les différences, excepté l'ordre dans lequel on empile les parametres?


 
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 :D)
 
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)


Message édité par chrisbk le 15-07-2003 à 15:49:01
Reply

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 :
  1. #ifdef CREATE_CRPE_DLL
  2.     #define CRPE_API __declspec( dllexport )
  3. #else
  4.     #define CRPE_API __declspec( dllimport )
  5. #endif


 
c'est un header fourni avec une dll ?
Le plus simple, ca reste quand meme de regarder comment est défini CRPE_API  ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-07-2003 à 22:10:47    

ah tiens oui j'y avais meme pas pensé, balot que je suis

Reply

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 :

Code :
  1. #ifdef CREATE_CRPE_DLL
  2.     #define CRPE_API __declspec( dllexport )
  3. #else
  4.     #define CRPE_API __declspec( dllimport )
  5. #endif


 
c'est un header fourni avec une dll ?
Le plus simple, ca reste quand meme de regarder comment est défini CRPE_API  ...
 


Il y a une DLL : CRPE32.DLL, mais que puis-je apprendre à son sujet ? C'est compilé, non ?


---------------
Le site de ma maman
Reply

Marsh Posté le 16-07-2003 à 14:27:05   

Reply

Marsh Posté le 16-07-2003 à 14:29:48    

Cherrytree a écrit :


Il y a une DLL : CRPE32.DLL, mais que puis-je apprendre à son sujet ? C'est compilé, non ?


 
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)

Reply

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


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed