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 un programme C++ en delphi


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut Traduire un programme C++ en delphi
    bonjour tout le monde,

    j'ai un programme en C++ que je dois retranscrire en delphi, cependant je bloque sur une partie du programme.
    j'aimerais savoir si quelqu'un pourrait m'aider à le traduire.
    j'utilise delphi 7 comme logiciel de programmation delphi et visual C++.net pour la lecture du programme C++.

    voici le bout de programme que je n'arrive pas à traduire:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct sdk_and_info
    {
          prUInt32m_SelectedSDK;		
          union
          {
                prDeviceInfoTable SelectedSrc_PRSDK;
                cdSourceInfo SelectedSrc_CDSDK;	
          } SrcInfo;
    } SDK_AND_INFO;
    merci de l'aide que vous pourrez m'apporté

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    j'ai oublié de préciser quelque chose, j'ai essayé de traduire le bout de programme, ce qui me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type  SDK_AND_INFO = record
                m_SelectedSDK :prUInt32;		    
            end;
            SrcInfo = record
               case integer of
                  0: (SelectedSrc_PRSDK :prDeviceInfoTable);
                  1: (SelectedSrc_CDSDK :cdSourceInfo);	    
               end;
            end;
    cependant cela ne fonctionne pas après le "1" du case integer.
    voilà ce que je peux apporter comme précision à mon problème

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Haaa il y a donc un espace entre prUInt32 et m_SelectedSDK (cf premier post )

    Moi je dirais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type  SDK_AND_INFO = record
      m_SelectedSDK :prUInt32;
      case SrcInfo: Integer of
        0: (SelectedSrc_PRSDK: prDeviceInfoTable);
        1: (SelectedSrc_CDSDK: cdSourceInfo);
      end;
    end;
    Maintenant c'est vrai que la syntaxe qui s'approche le plus du union C++ c'est le Case Of dans les Record au vu de ce que j'ai lu mais pourtant j'ai pas le sentiment que ça fasse exactement la même chose, à tester donc...

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    je viens de tester le programme et lors de la compilation j'ai toujours le même message d'érreur au niveau de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1: (SelectedSrc_CDSDK: cdSourceInfo);
    le message d'erreur est le suivant :
    le type 'cdSourceInfo' nécessite une finalisation-non autorisé dans l'enregistrement variant
    je n'arrive pas à trouvé ce que le message d'erreur souhaite que je rajoute étant donné que le cdSourceInfo à bien été déclaré auparavant.

    merci de votre aide Aka Guymelef

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    cdSourceInfo doit vraisemblablement être de type String (ou manipuler un string). Ce qui malheureusement n'est pas autorisé dans la partie variable d'un record.

    @+ Claudius

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    voici la déclaration de 'cdSourceInfo' en c++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct{
    	cdSourceType		SurceType;				/* Type of the device                   */
    	cdUInt32			rsrvd;					/* Reserved		                        */
    	cdStr63				Name;					/* Device model name 
    												   (invalid if cdSRC_TYPE_HOST)         */
    	#ifndef macintosh
    	cdStr63				NameInOS;				/* Device model name in OS				*/
    	#endif
    	cdPortType			PortType;				/* Port type                            */
    	cdPortDescripUnion	u;						/* Union of I/O port descriptor         */
    } cdSourceInfo;
    et voici ce que j'ai réalisé en delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
        cdSourceInfo = record
        SurceType:cdSourceType;        {* Type of the device                        *}
        rsrvd   :cdUInt32;             {* Reserved	                                *}
        Name    :cdStr63;              {* Device model name
                                                    (invalid if cdSRC_TYPE_HOST)    *}
        NameInOS:cdStr63;              {* Device model name in OS              *}
        PortType:cdPortType;           {* Port type                            *}
        u       :cdPortDescripUnion;   {* Union of I/O port descriptor         *}
      end;
    effectivement je remarque bien que le cdsourceinfo manipule un string 'cdStr63'.

    que faudrait-il que je fasse pour pouvoir ainsi traduire correctement le programme c++ en delphi afin d'utilisé le case of pour le 'cdsourceinfo' sans utiliser de string

  7. #7
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 546
    Points
    546
    Par défaut
    Bonjour,
    le case of dans les record permet bien d'obtenir la même fonctionnalité que les unions du C/C++.

    Il ne peut contenir aucun type necessitant une finalisation (string, mais aussi interfaces, tableaux dynamiques ...). En effet, le compilateur génère un code de libération pour ces types (plus précisément une décrémentation d'un compteur de référence suivi d'une libération en cas de compteur à zéro).
    Une partie variable contenant plusieurs types différents partageant le même espace mémoire, le compilateur ne peut savoir si il doit ou pas effectuer sa finalisation sur ces types. Ils sont donc interdits dans une partie variable.

    Attention écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case SrcInfo: Integer of
    rajoute une variable SrcInfo de type Integer dans le record (=> décalage des champs par rapport à la structure C) contrairement à

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    a priori tes cdStr63 devrai correspondre a des "shortstring"
    ou des truc du genre STRING[64]

    @+ Phil

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Merci pour ces précisions gb_68 .

    A partir de là il faut voir qu'est-ce que tu veux réellement faire de ce Record vu que tu ne vas pas pouvoir le recréer à l'identique par rapport au C++. Si tu ne vas t'en servir qu'uniquement dans ton programme alors il va falloir opter pour une vision différente (plusieurs records sans partie variable, classe, etc...).

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    a priori tes cdStr63 devrai correspondre a des "shortstring"
    ou des truc du genre STRING[64]

    @+ Phil
    Non, je verrais plus un string. Pour les ShortString ou String[nn] leurs dimensions sont connues à la compilation, donc cela devrait passer.

    @+

  11. #11
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    grace à vos réponse je me rend compte effectivement que je ne vais pas pouvoir recréer à l'identique le programme C en delphi.
    je vais donc opter comme tu le précise Aka Guymelef pour l'utilisation de plusieurs records sans partie variable.

    je vous remercie tous pour vos réponses et votre aide sur le sujet.

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    j'ai traduit beaucoup de source c++
    en règle générale si il créer un type particulier c'est que justement celui ci doit avoir une taille particulière .
    c'est donc pour ça que j'ai donné se type de solution et effectivement comme ce type de string a une taille maxi défini celui-ci fonctionne très bien avec ce type de record

    @+ Phil

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ah d'accord, j'avais mal interprété le sens de ton post.
    Thanks.

    @+ Claudius

  14. #14
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    si ce type de string fonctionne très bien avec ce type de record pourquoi lors de ma compilation j'ai le message d'erreur

    le type 'cdSourceInfo' nécessite une finalisation-non autorisé dans l'enregistrement variant
    je ne vois pas ou est mon erreur de traduction je ne vois pas ce que je peux rajouter ou enlever

  15. #15
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Pour répondre il faudrait que tu nous donnes les définitions des alias que tu as utilisés (cdSourceType, cdUInt32, cdStr63, etc...).

  16. #16
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    le string tout seul est une chaine non borné donc sans fin
    ce qui n'est pas utilisable dans le type de record que tu veut faire
    parcontre le simple fait de mettre des crochet au string avec une valeur inferieur a 255 le compilateur traduit donc ce string en un shortstring

    je repete donc il faut que tu creer un type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type 
    cdStr63 = string[64]

    @+ Phil

  17. #17
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    je vous donne les alias:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     {* cdSourceType
        Type of the source device *}
    type  cdSourceType=cdUInt32;
    const
    	cdSRC_TYPE_INVALID     =( cdSourceType(0) );
    	cdSRC_TYPE_HOST        =( cdSourceType(1) );
    	cdSRC_TYPE_CAMERA      =( cdSourceType(2) );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type cdUInt32           =Longword;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {* Strings *} 
                   type cdStr63  = array [0..63]  of cdChar;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {* cdPortType
        Type of the port. *}
    type   cdPortType=cdUInt32;
    const
    	cdPORT_TYPE_NO_PORT  	=( cdPortType(0) );
    	cdPORT_TYPE_USB   	  =( cdPortType(1) );
    	cdPORT_TYPE_IEEE1394 	=( cdPortType(2) );
         cdPORT_TYPE_STI       =( cdPortType(3) );
         cdPORT_TYPE_WIA       =( cdPortType(4) );
    	cdPORT_TYPE_ANY	      =( cdPortType($7FFFFFFF) );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {* cdPortDescripUnion
       I/O port descriptor union - contains all I/O port descriptors*}
    type cdPortDescripUnion = record
        STI     :cdPortDescripSTI;
        WIA     :cdPortDescripWIA;
        rsrvd   :cdPortDescripRsrvd;
    end;
    voilà à quoi correspond tous les alias utilisés dans mon code source delphi correspondant au 'cdSourceInfo'

  18. #18
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    le cdchar je suppose que c'est un char ?

    @+ Phil

  19. #19
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    le cdchar est effectivement un char


  20. #20
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et les cdPortDescripSTI, cdPortDescripWIA et cdPortDescripRsrvd ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Traduire un programme
    Par cjacquel dans le forum Windows
    Réponses: 1
    Dernier message: 17/05/2006, 12h41
  2. Programmation CICS sous Delphi
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 08/12/2005, 11h29
  3. A la sortie de la programmation DOS, WINDEV ? DELPHI ? ou ?
    Par zanimox dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 18/08/2005, 17h25
  4. Questions sur la programmation objet en Delphi
    Par Manopower dans le forum Débuter
    Réponses: 20
    Dernier message: 15/06/2005, 15h39
  5. Programmation WEB avec delphi
    Par mayoguy dans le forum Web & réseau
    Réponses: 4
    Dernier message: 20/08/2002, 19h03

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