IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comment définir des appels de dll se terminant par @n ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut Comment définir des appels de dll se terminant par @n ?
    Bonjour à tous.

    Je suis dans une petite impasse là. Je ne m'y connais pas énormément en C, mais je dois développer un dll d'interfacage entre une application déjà existante (dont je ne peux pas toucher le code) et une autre dll, ce en remplaçant une dll déjà existante (dont je n'ai accès qu'à la documentation).

    J'avais déjà fait une dll, et je connais les principes de base pour leur création (fichier .def). Seulement là, c'est moi qui écrivait les appels ensuite.

    Là les appels des fonctions se font de manière étrange. Enfin, c'est le nom des fonctions qui est étrange (exemple _GetCanal@0). Au début je pensais que le @8 correspondait au numéro du .def, mais apparemment, cela n'a rien à voir ! En effet, plusieurs fonctions ont le même numéro. Si j'essaie de nommer une fonction comme ça dans le source, ça compile pas (ce qui n'est pas étonnant d'ailleurs).

    Alors, ma question : que signifie ce @0 (ou @4, @8, @12, @16, @20, @28 ça dépend des fonctions) et comment dois-je gérer ça dans ma dll?

    Merci d'avance pour vos réponses

    [edit] faute de frappe

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut
    Merci

    Si j'ai bien compris, il faut que j'utilise la routine __stdcall

    Je vais tester ça ^^

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Non, ça veut dire que les fonctions de cette DLL sont en __stdcall.

    Donc, les prototypes (et les types de pointeurs de fonction) doivent l'être aussi.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut
    Oui, mais vu que je dois remplacer cette dll, il faut que j'utilise la routine __stdcall pour écrire mes fonctions.

    Enfin, après un premier test, ça marche bien, merci beaucoup ^^

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Il n'y a pas de "la routine" __stdcall.
    __stdcall est un mot-clé, un modifieur, au même titre que static, inline ou __declspec(dllexport)...

    Une fonction C est soit __stdcall, soit __cdecl, soit __fastcall.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment définir des constantes en C#
    Par samwac dans le forum C#
    Réponses: 11
    Dernier message: 21/01/2009, 18h05
  2. Réponses: 5
    Dernier message: 26/08/2008, 16h00
  3. comment définir des constantes applicatives
    Par paolo2002 dans le forum Struts 2
    Réponses: 2
    Dernier message: 03/04/2008, 09h49
  4. Réponses: 7
    Dernier message: 09/02/2008, 08h49
  5. Comment définir des raccourcis clavier ?
    Par st0nky dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/12/2005, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo