Types Delphi - C++

Résolu
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 - 24 janv. 2008 à 17:32
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 janv. 2008 à 09:43
Bonjour à tous

Avec un programme en C++ Builder je dois lire et modifier des fichiers binaires générés avec un programme en delphi !

J'ai bien la structure de l'enregistrements de longueur fixe en delphi
mais je ne suis pas sur des types équivalents en c++ builder de borland.

voici les types rencontrés dans la structure.

Pour les types suivants ?

en pascal (delphi) :          en C++ (builder)
machin : string[40]           char machin[40] ? char machin[41] ?
bool                                bool ? int ?...
boolean                           ??
integer                             int ? long ? ...
byte                                 byte ? int ? ...
TRect                              TRect ?

Je ne connais pas les équivalents exacts...
Du coup mon "buffer" c++  n'aura pas la bonne longueur et je récupèrerai n'importe quoi

Quelqu'un peut-il m'aider ?

D'avance merci

7 réponses

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
25 janv. 2008 à 13:28
tu as ça :
http://turbo-pascal.developpez.com/tutoriel/convertion_pascal_c/
c'est + turbo pascal <--> c/c++
mais comme delphi est proche de turbo pascal....
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2008 à 17:44
n'irait pas plus vite de demander sur le forum delphi la taille de leurs types ?

ciao...
BruNews, MVP VC++
0
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 1
25 janv. 2008 à 10:26
Renseignement pris auprès d'un développeur Delphi,
alors pour ceux que ça intéresse :

en delphi                                  en c++ builder
bool : 4 octets (!)                    : ?
boolean : 1 octet                     : bool
entier : 4 octets                       : int ? (signé je pense)
byte : 1 octet                          : byte
trect : 16 octets                      : TRect
string[n] : n+1 octets               : char mavariable[n+1]

Pour le string, pas de zéro terminal mais le 1er octet contient la longueur de la chaine (donc 255 car max)

Voilà !
Si d'autes peuvent confirmer, corriger et compléter le cas échéant
0
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 1
25 janv. 2008 à 16:04
Super !

Merci beaucoup pour ta réponse.

C'est exactement ce que je cherchais et plus encore
Avec toutes ces informations on pourrait (presque) imaginer une moulinette pour 1/2 automatiser un portage delphi vers c++, non ? Du moins une première étape.

Bon week-end
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2008 à 16:09
La taille des types ne suffit pas, faut faire gaffe au pragma d'alignement des données.

ciao...
BruNews, MVP VC++
0
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 1
28 janv. 2008 à 09:12
Salut Brunews

bien vu, mais je ne me suis pas laissé prendre au piège .
Il faut en effet prendre garde aux options avancées du compilateur...

Dans mon cas, pour assurer la compatibilité avec les données générées par le programme Delphi j'ai du utiliser l'alignement "double word".

Je ne doute pas de l'utilité de cette option mais toutefois je ne comprends pas trés bien sa raison d'être...
Sans doute celà a t'il a voir avec l'optimisation de la vitesse selon le type de processeur...

A+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 janv. 2008 à 09:43
L'adressage doit toujours se faire sur une adresse multiple de la taille de la donnée.
DWORD sur un multiple de 4, WORD sur 2, BYTE no prob vu que c'est 1.

Quand les données ne sont pas alignées correctement, le CPU déclenche une exception d'alignement. Windows est réglé par défaut pour la rattraper, c'est donc transparent pour le prog mais couteux en cycles.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous