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 :

Conversion C++ -> Delphi


Sujet :

Delphi

  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Par défaut Conversion C++ -> Delphi
    Bonjour,
    J'ai un programme C++ que je dois traduire en Delphi et je bloque sur la partie suivante :

    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
     
    typedef struct temp_struc
    {
    	unsigned char	*ptr_tampon_entree;	
    	unsigned long	longueur_tampon_entree;	
    	unsigned char	*ptr_tampon_sortie;	
    	unsigned long	longueur_tampon_sortie;	
    	unsigned long	pointeur_relatif;
    	unsigned long	taille_tampon_sortie;
    }TEMP_STRUC;
    ...
    TEMP_STRUC struc;
    char *tampon_entree = (char *)malloc (sizeof (unsigned char) * 4096);
    char *tampon_sortie = (char *)malloc (sizeof (unsigned char) * 4096);
     
    struc.ptr_tampon_entree = (unsigned char*)tampon_entree;
    struc.longueur_tampon_entree = strlen (tampon_entree);
    struc.pointeur_relatif = 0;
     
    struc.ptr_tampon_sortie = (unsigned char*)tampon_sortie;
    struc.longueur_tampon_sortie = 4096;
    struc.taille_tampon_sortie = 0L;
    Un pointeur sur la structure est ensuite passé en paramètre dans une fonction appartenant à une DLL. Lorsque je traduis cela en Delphi, j'ai l'erreur suivante : 'Violation d'accès à l'adresse 1011D2D2' lors de l'exécution de la fonction de la DLL. Je pense que c'est du à une mauvaise traduction de ma part de la structure ou de son initialisation mais je ne vois pas trop comment faire. Si quelqu'un pouvait m'aider, ça serait sympa, merci !

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Est-ce que tu peux nous donner ta traduction en Delphi...

    J'aimerais mieux valider que de tout refaire...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Bonjour,

    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
    type
      Temp_Struct = record
        ptr_tampon_entree: PChar;
        longueur_tampon_entree: Cardinal;
        ptr_tampon_sortie: PChar;
        longueur_tampon_sortie: Cardinal;
        pointeur_relatif: Cardinal;
        taille_tampon_sortie: Cardinal;
      end;
    
      
    var
      struc: Temp_Struct;
      tampon_entree: PChar;
      tampon_sortie: PChar;
    begin
      GetMem(tampon_entree, SizeOf(Char) * 4096);
      GetMem(tampon_sortie, SizeOf(Char) * 4096);
    
      struc.ptr_tampon_entree := tampon_entree;
      struc.longueur_tampon_entree := StrLen(tampon_entree);
      struc.pointeur_relatif := 0;
      
      struc.ptr_tampon_sortie := tampon_sortie;
      struc.longueur_tampon_sortie := 4096;
      struc.taille_tampon_sortie := 0;
    end;
    Il doit manquer des éléments dans le code original...

    @++

  4. #4
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Par défaut
    Citation Envoyé par Eric Sigoillot
    Bonjour,

    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
    type
      Temp_Struct = record
        ptr_tampon_entree: PChar;
        longueur_tampon_entree: Cardinal;
        ptr_tampon_sortie: PChar;
        longueur_tampon_sortie: Cardinal;
        pointeur_relatif: Cardinal;
        taille_tampon_sortie: Cardinal;
      end;
    
      
    var
      struc: Temp_Struct;
      tampon_entree: PChar;
      tampon_sortie: PChar;
    begin
      GetMem(tampon_entree, SizeOf(Char) * 4096);
      GetMem(tampon_sortie, SizeOf(Char) * 4096);
    
      struc.ptr_tampon_entree := tampon_entree;
      struc.longueur_tampon_entree := StrLen(tampon_entree);
      struc.pointeur_relatif := 0;
      
      struc.ptr_tampon_sortie := tampon_sortie;
      struc.longueur_tampon_sortie := 4096;
      struc.taille_tampon_sortie := 0;
    end;
    Il doit manquer des éléments dans le code original...

    @++
    Je te remercie beaucoup. Avec ta solution ça marche impeccable ! Je n'allouais pas correctement la mémoire des PChar et mon problème venait de là.

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

Discussions similaires

  1. [Lazarus] Conversion de projets Delphi > Lazarus Linux
    Par Clandestino dans le forum Lazarus
    Réponses: 0
    Dernier message: 28/08/2008, 09h27
  2. Interface et conversion C++ vers Delphi
    Par monmien dans le forum Langage
    Réponses: 8
    Dernier message: 17/06/2008, 16h27
  3. Conversion C# vers Delphi.NET
    Par JulioG dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 15/02/2008, 12h03
  4. Conversion de C => Delphi
    Par Steff2 dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2007, 23h32
  5. conversion de date (delphi/oracle)
    Par dolphins dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/09/2005, 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