Les conventions d'appel et les dll?
Comment dois-je appeler une méthode dans une DLL écrite en C ou en C ?
L'importance des conventions d'appel
En Delphi, lors de la déclaration d'une procédure ou d'une fonction, nous pouvons spécifier une convention à l'aide de l'une des directives de registre, pascal, cdecl, stdcall, et safecall.
Toutes ces conventions déterminent l'ordre dans lequel les paramètres sont transmis à la fonction/procédure.
Laissez-moi vous expliquer brièvement ce que ces conventions veux dire.
Toutes les conventions d'appel de faire usage de la pile pour passer des paramètres en arrière et en avant à l'exception du Registre de la convention.
Inscrivez-vous/Pascal:
Ces conventions de passer des paramètres (de procedure/function) de gauche à droite. Le plus à gauche du paramètre est évalué et a passé le premier et le plus à droite paramètre est évalué et passé en dernier.
Et le 'Registre' convention d'appel rend l'utilisation de registres du PROCESSEUR et par conséquent, il est plus rapide que d'autres conventions. Lorsque vous utilisez cette convention, il n'y aura aucune création de la pile lors de l'exécution si les paramètres sont inférieures ou égales à trois. Si les paramètres sont plus que trois, puis le reste des paramètres de la pile.
Ce 'Registre' de la convention est la valeur par défaut dans Delphi et c'est l'efficace de tous car il ne crée pas de/utilisation de la pile lors de l'exécution.
'Pascal' convention est utilisée pour la compatibilité descendante.
La pile processus de nettoyage sera fait automatiquement pour toutes les conventions lors de l'appel retourne à l'exception de 'Cdecl'.
Cdecl/stdcall/safecall:
Ces conventions de passer des paramètres à partir de la droite vers la gauche. Le plus à droite paramètre est évalué et a passé le premier
et le plus à gauche du paramètre est évalué et passé en dernier. Avec cette convention, l'appelant a supprimer les paramètres de la pile lors de l'appel retourne. Il est donc de la responsabilité de l'appelant.
Pourquoi suis-je écrire ces simples choses dans le détail?
Oui. Ce sera très utile lorsque vous écrivez DLL soit en Delphi et accéder à Delphes Ou l'accès à une DLL écrites en d'autres langues.
Lorsque vous écrivez une fonction/procédure dans une DLL en Delphi, vous allez spécifier la convention d'appel pour chaque. Aussi lorsque vous appelez les fonctions/procédures à partir d'une application, soit par le chargement statique ou dynamique de chargement, vous devez spécifier le type de convention d'appel.
Lorsque vous appelez une DLL écrite en C ou C , vous devez utiliser le 'cdecl' de la convention. Sinon, vous
le mettre dans 'violation d'Accès' problèmes et, parfois, l'application peut se bloquer. Aussi la DLL, vous appelez, devrait être sur le chemin de recherche.
je rencontre un problème dans mon projet, tout simplement parce que de cette convention d'appel. Dans mon application, j'ai besoin d'appeler une méthode dans une DLL C. J'ai copié les DLL dans ma machine. Ensuite, j'ai déclaré toutes les méthodes dans la DLL dans Delphi et essayé d'appeler l'un d'entre eux. Lorsque j'essaie d'accéder à une méthode, je l'ai eu 'violation d'Accès' parfois, l'application est bloquée et parfois la totalité de la demande s'est écrasé. Enfin j'ai regardé dans le Delphi aider et a obtenu la solution avec la convention d'appel. J'ai donc déclaré chaque méthode dans la DLL en Delphi avec le 'cdecl' de la directive. Il a bien fonctionné. Alors n'oubliez pas d'ajouter cette directive dans chaque appel de méthode à partir d'une DLL écrite en C/C .
Parfois, de retour, j'ai vu une personne qui pose ce problème dans le forum, comme comment appeler une méthode dans une DLL écrite en C/C . C'est la solution.
Profitez-en!!!
Merci.
Magesh.
Les conventions d'appel et les dll?
Les conventions d'appel et les dll? : Plusieurs milliers de conseils pour vous faciliter la vie.
Comment dois-je appeler une methode dans une DLL ecrite en C ou en C ?
L'importance des conventions d'appel
En Delphi, lors de la declaration d'une procedure ou d'une fonction, nous pouvons specifier une convention a l'aide de l'une des directives de registre, pascal, cdecl, stdcall, et safecall.
Toutes ces conventions determinent l'ordre dans lequel les parametres sont transmis a la fonction/procedure.
Laissez-moi vous expliquer brievement ce que ces conventions veux dire.
Toutes les conventions d'appel de faire usage de la pile pour passer des parametres en arriere et en avant a l'exception du Registre de la convention.
Inscrivez-vous/Pascal:
Ces conventions de passer des parametres (de procedure/function) de gauche a droite. Le plus a gauche du parametre est evalue et a passe le premier et le plus a droite parametre est evalue et passe en dernier.
Et le 'Registre' convention d'appel rend l'utilisation de registres du PROCESSEUR et par consequent, il est plus rapide que d'autres conventions. Lorsque vous utilisez cette convention, il n'y aura aucune creation de la pile lors de l'execution si les parametres sont inferieures ou egales a trois. Si les parametres sont plus que trois, puis le reste des parametres de la pile.
Ce 'Registre' de la convention est la valeur par defaut dans Delphi et c'est l'efficace de tous car il ne cree pas de/utilisation de la pile lors de l'execution.
'Pascal' convention est utilisee pour la compatibilite descendante.
La pile processus de nettoyage sera fait automatiquement pour toutes les conventions lors de l'appel retourne a l'exception de 'Cdecl'.
Cdecl/stdcall/safecall:
Ces conventions de passer des parametres a partir de la droite vers la gauche. Le plus a droite parametre est evalue et a passe le premier
et le plus a gauche du parametre est evalue et passe en dernier. Avec cette convention, l'appelant a supprimer les parametres de la pile lors de l'appel retourne. Il est donc de la responsabilite de l'appelant.
Pourquoi suis-je ecrire ces simples choses dans le detail?
Oui. Ce sera tres utile lorsque vous ecrivez DLL soit en Delphi et acceder a Delphes Ou l'acces a une DLL ecrites en d'autres langues.
Lorsque vous ecrivez une fonction/procedure dans une DLL en Delphi, vous allez specifier la convention d'appel pour chaque. Aussi lorsque vous appelez les fonctions/procedures a partir d'une application, soit par le chargement statique ou dynamique de chargement, vous devez specifier le type de convention d'appel.
Lorsque vous appelez une DLL ecrite en C ou C , vous devez utiliser le 'cdecl' de la convention. Sinon, vous
le mettre dans 'violation d'Acces' problemes et, parfois, l'application peut se bloquer. Aussi la DLL, vous appelez, devrait etre sur le chemin de recherche.
je rencontre un probleme dans mon projet, tout simplement parce que de cette convention d'appel. Dans mon application, j'ai besoin d'appeler une methode dans une DLL C. J'ai copie les DLL dans ma machine. Ensuite, j'ai declare toutes les methodes dans la DLL dans Delphi et essaye d'appeler l'un d'entre eux. Lorsque j'essaie d'acceder a une methode, je l'ai eu 'violation d'Acces' parfois, l'application est bloquee et parfois la totalite de la demande s'est ecrase. Enfin j'ai regarde dans le Delphi aider et a obtenu la solution avec la convention d'appel. J'ai donc declare chaque methode dans la DLL en Delphi avec le 'cdecl' de la directive. Il a bien fonctionne. Alors n'oubliez pas d'ajouter cette directive dans chaque appel de methode a partir d'une DLL ecrite en C/C .
Parfois, de retour, j'ai vu une personne qui pose ce probleme dans le forum, comme comment appeler une methode dans une DLL ecrite en C/C . C'est la solution.
Profitez-en!!!
Merci.
Magesh.
Les conventions d'appel et les dll?
By commentfaire
Les conventions d'appel et les dll? : Plusieurs milliers de conseils pour vous faciliter la vie.