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 C++ Discussion :

Passer de Delphi à C++


Sujet :

Langage C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Passer de Delphi à C++
    Bonjour à tous,

    J'ai transcrit une fonction Delphi en C++ telle que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    	//**************** Fonction initialisation segmentation ********************
     
    	int InitSegmentationOk(	const unsigned int Degree, const int Speed,
    							const double Start, const bool CustomOK,
    							const bool BlackButtom, TPeekSegCfg CurSeg)
    	{
    	CurSeg.Degree = Degree;
    	CurSeg.Speed = Speed;
    	CurSeg.Start = Start;
    	CurSeg.CustomOk = CustomOK;
    	CurSeg.BlackButtom = BlackButtom;
    	CurSeg.RBGStep = 256/pow((32*pow(2.0,Degree)),(1.0/3.0));
    	CurSeg.NbrCalcSeg = (int)(32*pow(2.0,Degree));
    	CurSeg.NbrUsedSeg = 0;
    	CurSeg.Segvec = (TPeekSegment*)malloc(CurSeg.NbrCalcSeg*sizeof(TPeekSegment));
    	CurSeg.CubeRGBvec = (Cube*)malloc(CurSeg.NbrCalcSeg*sizeof(Cube));
     
    		for(int k=0;k< CurSeg.NbrCalcSeg;k++)
    		{
    		//Initialisation du vecteur de structures Segvec
    		CurSeg.Segvec[k].SegNo = k+1;
    		CurSeg.Segvec[k].OrdBySize = 0;
    		CurSeg.Segvec[k].dEmax = 0.0;
    		CurSeg.Segvec[k].Used = true;
    		CurSeg.Segvec[k].Deleted = false;
    		CurSeg.Segvec[k].Added = false;
    		CurSeg.Segvec[k].ControlOK = false;
    		CurSeg.Segvec[k].PixSize = 0;
    		CurSeg.Segvec[k].Percent = 0.0;
    			for(int i=0;i<3;i++)
    			{
    			CurSeg.Segvec[k].LChmean[i]= 0.0;
    			CurSeg.Segvec[k].Labmean[i]= 0.0;
    			CurSeg.Segvec[k].LChmin[i]= 0.0;
    			CurSeg.Segvec[k].LChmax[i]= 0.0;
    			CurSeg.Segvec[k].RGBmean[i]= 0.0;
    			}
    		}
    Si j'appelle cette fonction par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (InitSegmentationOk(1,1,1.0,true,false,* CurSeg)==0)
    {
    }
    La valeur de la structure CurSeg->NbrCalcSeg est de 64 au cours du traçage du code mais devient 1635652 à la sortie de la fonction

    Quelqu'un peut-il m'expliquer ?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si tu veux qu'un argument passé à ta fonction soit modifiable, il faut le passer par référence (ou, ce qui est souvent préférable s'il n'est pas lu mais sert juste de paramètre de sortie, le mettre en valeur de retour de ta fonction) :

    http://cpp.developpez.com/faq/cpp11?...-a-ma-fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int InitSegmentationOk(	const unsigned int Degree, const int Speed,
    							const double Start, const bool CustomOK,
    							const bool BlackButtom, TPeekSegCfg &CurSeg)
    En outre, une fonction se nommant init mériterait probablement d'être transformée en constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class PeekSegCfg  // J'ai l'impression que le T ne signifie rien dans le nom de ta classe, je l'ai enlevé)
    {
    public:
        PeekSegCfg  (	const unsigned int Degree, const int Speed, const double Start, const bool CustomOK, const bool BlackButtom);
    };
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut
    La première modification génère une violation access mais j'obtiens le bon résultat.
    Pour la seconde modification il faut que j'aborde sérieusement la notion de class que je n'utilise pas sous Delphi

    La violation d'accès se produit dans le module vcl170.bpl

Discussions similaires

  1. Je veux passer du delphi 7 vers un langage open source
    Par aimer_Delphi dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 01/03/2015, 09h25
  2. Passer de Delphi 2010 à Delphi XE3
    Par chekkal dans le forum Delphi
    Réponses: 5
    Dernier message: 21/12/2014, 12h45
  3. Passer de Delphi à Java ?
    Par arkhamon dans le forum Débuter avec Java
    Réponses: 33
    Dernier message: 20/03/2011, 15h26
  4. Réponses: 3
    Dernier message: 04/10/2005, 09h33
  5. Comment passer sous Delphi ?
    Par J-P-B dans le forum XMLRAD
    Réponses: 2
    Dernier message: 13/06/2003, 10h09

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