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

Delphi Discussion :

Transcription Fonction C++ en Delphi


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Transcription Fonction C++ en Delphi
    Bonjour à tous,

    J'essaie d'exploiter une DLL dont les deux fonctions sont les suivantes :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    __declspec(dllexport) LPCWSTR* MW_ListReaders(_ULONG Context, int* NumberOfReaders);
    __declspec(dllexport) _ULONG MW_Connect(_ULONG Context, LPCWSTR ReaderName);

    Pour les exploiter sous Delphi, et pour la fonction MW_ListReaders, j'ai fait la déclaration suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function MW_ListReaders(Context : int64; var NumberOfReaders : integer) : PWideChar; stdcall;
    Mais ça ne fonctionne pas. Ne connaissant pas grand chose sous C++ et de surcroit, les pointeurs, je suis perdu.

    Comment transcrire ces deux fonctions sous Delphi ?

    Merci

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Pourquoi stdcall plutôt que cdecl ?
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    la différence est dans le nettoyage de la pile après emplois

    cdecl : c'est la fonction appelante qui va effectuer le nettoyage de la pile
    stdcall : ce ne sera plus la fonction appelante mais la fonction appelée qui nettoie la pile

    dans les api windows c'est la deuxième solution qui a été choisi
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    OK, si le principe a été respecté.

    Sinon, _ULONG ne serait-il pas plutôt un Cardinal ?
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    en faisant des recherche sur le net on vois que effectivement ce n'est pas une api windows et que l'appel est du cdecl

    voila ce que donne une petite recherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function MW_ListReaders(Context: Cardinal; var NumberOfReaders : integer): PPWideChar; cdecl;
    function MW_Connect(Context: Cardinal; ReaderName: PWideChar): Cardinal; cdecl;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Pb Fonction Power sous Delphi 7
    Par kimlee dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2009, 15h57
  2. la fonction split en delphi
    Par toutou2000 dans le forum Débuter
    Réponses: 7
    Dernier message: 06/11/2008, 18h37
  3. Ancienne fonction TP7 en Delphi
    Par mpetri dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2008, 19h37
  4. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 19h15
  5. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 18h45

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