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

Langage Delphi Discussion :

[D7] traduction de l'ApiMySql v5.0


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut [D7] traduction de l'ApiMySql v5.0
    Je suis en train de convertir l'api mysql vers 5 de C sous Delphi 7.

    Mais j'ai quelques petits problèmes:

    - Comment convertir dans un record ce qui suit :

    typedef struct st_mysql
    {
    ...
    const struct st_mysql_methods *methods;
    void *thd;
    ...
    } MYSQL;
    Ce qui m'intéresse c'est comment traduire principalement principalement "const struct" et "void" sous delphi

    j'ai le début de la réponse, mais pour traduire un void dans un record en delphi je sais pas trop faire. C'est comme le "const struct" dans un record (comment déclare t on un const et un void dans un record).

    -Comment traduit on ce qui suit de C en delphi

    struct st_mysql_methods;
    Je déclarer sous delphi un record qui fait appel dans un de ses paramètres à un autre record déclaré précédemment. Et dans celui-ci il y a un paramètre qui fait appel à celui précédemment cité mais qui est déclarer aprèsce record.

    Comment puis je faire pour déclarer juste la structure du record afin que le premier des deux que j'utilise sache que l'autre existe.

    PS : Si par hasard quelqu'un l'a déjà fait ou l'a simplement entamé, pourriez vous me le faire parvenir!


    Merci

    Anthony

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    Je comprend mal ton problème, est-ce tes records se font mutuellement référence dans leur définition ?

    Cela revient à dire que tu as des record définis récursivement. C'est un cas de récursivité mutuelle.

    Si tel est le problème, la clause forward ne joue pas, tu vas être bien embêté. On contourne généralement ce problème en utilisant des pointeurs sur les record.

    Tu peux montrer ton code mais le strict nécessaire i.e. les définitions de type tels que tu les conçois actuellement (y compris avec les erreurs de compilation). Eventuellement donnes aussi les définitions de tes struct à convertir.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    rtuyt

    type
    PMYSQL = ^TMYSQL;

    TMYSQL = record
    methods: PMYSQL_METHODS;
    ...
    end;

    type
    PMYSQL_METHODS = ^TMYSQL_METHODS;
    TMYSQL_METHODS = record
    read_query_result: function(_mysql: PMYSQL): Pmy_bool;
    advanced_command: function(_mysql: PMYSQL; command:
    ...
    end;

    Et tu peux donc voir q"effectivement mes records se font mutuellement références dans leur définitions comme tu l'as précédemment dit.

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    void *toto
    se traduit par
    toto pointer

  5. #5
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    ca fait longtemps le c...
    void signifie rien, autrement dit, thd sera de type 'Pointer' en delphi
    et methods est un pointeur sur un record st_mysql_methods

    du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      methods : ^st_mysql_methods
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Coucou

    En fait il n'y a pas de réelles référence mutuelle (cela poserait un léger problème "théorique" de structure mutuellement imbriquées), la déclaration des types Pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PMYSQL = ^TMYSQL; 
    PMYSQL_METHODS = ^TMYSQL_METHODS;
    sont des déclarations de type pointeurs et permettent de définir des "références" de record. Ce code est parfaitement légitime (sous réserve des instructions près).

    Tout au plus, je pense qu'il faut que tu déclares tous les types de pointeurs avant les types record asssociés . Tu n'as en fait pas le choix, il fuat passer par ces déclarations de pointeurs.

    Quel problème te pose ce code (compilation, compréhension...) ?

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    En fait j'ai une erreur à la construction:

    Identificateur non déclaré: 'PMYSQL_METHODS'

    et je sais pas comment faire pour qu'il puisse savoir qu'en fait cet identificateur existe en dessous

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    Déplace la déclaration du type pointeur PMYSQL_METHODS avant le type record TMYSQL, c'est pourtant simple.

    Justification : en Pascal, tu ne peux utiliser ou faire mention d'un identificateur que s'il est préalablement déclaré. Dans le cas des types, la seule forme de déclaration qui échappe à cette règle est celle des pointeurs car l'allocation de mémoire pour une variable de type pointeur est constante et ne dépend pas du type de données pointé.

    Cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Tu peux aussi utiliser h2pas issu de free pascal.
    Cet utilitaire permet de convertir des header .C vers le Pascal/Delphi, certaines constructions sont mal supportées mais cela peut te faire gagner un peu de temps lors de la phase de conversion.

  10. #10
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    Merci laurent,

    mais j'ai un petit pb, j'ai beau lancer l'executable rien ne se passe.

    N'aurais tu pas oublié un quelconque fichier par hasard?

    Au fait e-ric :

    si je déclare le pointeur PMYSQL_METHODS avant le type record TMYSQL, le compilateur met le même type de message du type:

    Identificateur non déclaré: 'PMYSQL'
    Ceci car les duex record s'appellent mutuellement

    donc ... !!! ???

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par raoulmania
    mais j'ai un petit pb, j'ai beau lancer l'executable rien ne se passe.
    Il s'agit d'un utilitaire en mode commande, à utiliser dans une console.
    La liste des options est indiquée si tu l'exécutes sans paramètre.

Discussions similaires

  1. [Traduction] probleme de declaration
    Par Mercilius dans le forum Langage
    Réponses: 3
    Dernier message: 03/04/2003, 16h16
  2. TRaduction C++ => Delphi VOID ??
    Par escafr dans le forum Langage
    Réponses: 6
    Dernier message: 20/02/2003, 10h39
  3. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49
  4. Traduction
    Par PierDIDI dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/09/2002, 23h43
  5. Changement de langue dynamique (D6 et outils de traduction)
    Par agon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2002, 16h15

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