Fonction C -> pascal ?
muqaddar
Administrateur
Béjir,
Dites, c'est quoi ce genre de fonctions C qui commencent pas "pascal" ? Jamais vu !
Dites, c'est quoi ce genre de fonctions C qui commencent pas "pascal" ? Jamais vu !
pascal OSErr mySGDataProc(SGChannel c, <br /> Ptr p,<br /> long len,<br /> long *offset,<br /> long chRefCon,<br /> TimeValue time,<br /> short writeType, <br /> long refCon);<br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En PASCAL, tous les paramètres sont déposés sur la pile, l'éventuelle valeur de retour devant être placée au début.
En C, le paramètre de retour est toujours dans un registre du proc. Les paramètres d'envoi sont passés soit dans les autres registres, ou dans dans un bloc mémoire dont l'adresse est passé dans un registre.
Donc, une fonction C qui appelle une fonction qui a été compilée en PASCAL doit respecter la convention PASCAL de passage des paramètres. C'est la directive pascal qui l'indique.
.
Je crois que je vais relire ton message 3 fois.
Et c'ets quoi ce OSErr ? Erreur de retour éventuelle ?
Tu es sûr de ça ? ça me paraà®t improbable dans la mesure ou la valeur de retour peut être une struct.
+
Chacha
merci le crabe
2 cas peuvent se présenter :
1- la valeur de retour est un long-long (64 bits) : dans ce cas, 2 registres sont utilisés pour stocker cette valeur (typiquement R3 -poids fort- et R4 -poids faible- sur plateforme PPC).
2- la valeur de retour est une struct ou union : ici, c'est bien un pointeur qui est utilisé. Le pointeur est stocké dans R3 et doit être créé avant l'appel de la fonction (la création du bloc mémoire/pointeur est réalisée de manière transparente par GCC).
.