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 :

Traduire du Delphi en C


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Traduire du Delphi en C
    Bonjour!
    Je cherche à traduire un code delphi en C, et je galère un peu à certains endroits, alors je viens chercher conseil!
    Ma première question porte sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type
       funk  = procedure(pt : pointer; var tas : CompilStack);
    Je ne savais pas que l'on pouvait déclarer un type par une procédure, et que cela marchait!
    Pourriez-vous m'expliquer? Et/ou m'indiquer comment cela se traduirait en C,
    parce que j'ai eu beau chercher, je ne trouve pas grand chose dessus!

    Ensuite, il existe un type variant et un type pointer
    en delphi. Je comprends variant qui permet au compilateur de "choisir" le type le mieux adapté (int, float, ...), mais comment pourrais t-on le traduire en C ? Je ne peux pas le mettre en float ou en int, parce qu'il est plusieurs fois changé au cours de la suite de mon code! Quant au type pointer, je ne vois pas vraiment ce que cela veut dire (à part bien sur le pointeur mais bon ... )

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    Le 'var' de ta déclaration n'a rien à voir avec le type 'variant'. Il veut juste dire que le paramètre 'tas' est passé par référence. En C on utilise un pointeur à la place.

    Par exemple cette procédure pascal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure Exemple(pt : pointer; var tas : CompilStack);
    devient un truc de ce genre en C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Exemple(void * p, struct CompilStack * tas);

    Le type funk est un type pointeur de fonction. L'équivalent en C devrait être un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  void (* funk)(void * , struct CompilStack * );
    Cependant, la syntaxe du C dans ce domaine étant bien lourdingue, c'est sans garantie.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je sais bien que var et variant sont totallement différents !

    Je n'ai pas mis d'exemple précis pour ce type, mais je me demandais juste comment le traduire en c, et s'il existe un même type ...

    Pour le type funk, je pense que cela devrait marcher (je l'espere !!)

    Et si tu as une idée de comment m'expliquer le type pointer, je t'en serais très reconnaissant

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    'pointer' c'est un pointeur générique donc 'void *' en C.

    Pour le type variant il n'y a pas d'équivalent en C.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci batyanna
    Je vais voir ce que je peux faire avec mon variant et mon pointer

    je sens que ça va pas etre simple !!

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Sia,

    Il faut faire une structure avec une union (équivalent d'un champ variable dans un record de Pascal).
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    je vois ce que tu veux dire, j'ai fais quelques recherches sur le net pour savoir ce qu'est réellement une union, mais je n'ai pas vraiment compris

    En effet, si je ne me trompe pas, avec une union, on alloue de la mémoire qui peut changer de type, mais ça reste des nombres!
    Or variant, en delphi, peut passez de int à char non ?

    Ce que je ne peux pas faire avec une union ...

    Ou alors, je n'ai pas compris ce qu'est vraiment un variant ...

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Hoi,

    Pourquoi ça resterait des nombres ?

    Dans ton union, tu peux mettre des champs numériques, chaines, ... tout ce que tu veux.

    Au passage, c'est ni plus ni moins le principe même du type Variant : un champ donnant le type actuellement utilisé + des champs en union pour les différents types envisagés.
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    et bien, dans mon code, j'ai défini un nouveau type appelé variant.
    Et cela donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef union                                       
            {
                int     a;
                double  b;
                int     c;
            } variant;
    Mais alors, ici, je ne fais pas que des chiffres.
    Si je veux avoir des char ou des char*, je dois rajouter un champ :
    cela marche comme ça?

    et ce qui m'ennuie, c'est de devoir utiliser une structure ...
    parce que si je déclare une variable :
    car je devrais dans ce cas faire
    or ce serait bien plus pratique de n'avoir que " i "

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Sai,

    Ben oui, il faut faire avec, et le type Variant ne fait que cacher tout le mécanisme.

    Tu dois définir toutes les fonctions nécessaires pour manipuler proprement ta structure. Il est clair qu'en C++ ce serait plus simple avec une classe.

    Et je ne vois pas pourquoi tu demandes s'il faut rajouter des champs pour char ou char*, ça coule de source : tout type que tu estimes nécessaire DOIT être lié à un champ.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Oui, mais ce que je veux dire, c'est que par exemple si on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef union                                       
            {
                int         a;
                double    b;
                char*     c;
                char       d;
            } variant;
    Si on veut on char*, on est obligé d'utiliser : i.c
    pour un char : i.d, etc
    (avec i une variable du type variant)
    c'est ça ?
    Dans ce cas cela reste bien plus compliqué que le variant en delphi, ou on se contente d'appeler la variable, puisque comme tu le dis la structure (ou enregistrement) est implicite.
    Comme je dois traduire un code de delphi en C, cela ne va pas me simplifier les choses pour la suite

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Hia,

    Ben oui !!!

    Déjà dit : le type Variant de Delphi ne fait que cacher tout le mécanisme que tu es obligé de mettre en place en C.

    Si ça ne te convient pas, tu peux essayer d'imaginer une autre solution, et bon courage pour tes méninges.
    Si les cons volaient, il ferait nuit à midi.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    oki








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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2012, 15h50
  2. traduire du delphi en c
    Par clouder dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2010, 14h54
  3. Traduire Code C# --> Delphi
    Par mmsalem dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 09/06/2008, 01h22
  4. Traduire un programme C++ en delphi
    Par delphibou dans le forum Langage
    Réponses: 27
    Dernier message: 17/03/2008, 12h34
  5. traduire delphi 7 en francais
    Par sanfour_walhan dans le forum Delphi
    Réponses: 2
    Dernier message: 04/08/2006, 18h32

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