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

Lazarus Pascal Discussion :

Utilisation des packed records [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Utilisation des packed records
    Bonjour à toutes et à tous,

    Dans une application j'utilise des packed record pour mes données de travail et d'enregistrements de fichier.

    Après avoir , grâce à vous, réussi à compiler et exécuter cette application en 64 bits, je me trouve devant un autre problème : je n'arrive plus à ouvrir mes anciens fichiers créés en environnement 32 bits.

    Est-ce que cela peut-être dû aux packed record et si oui, y a-t-il moyen de les redéfinir afin qu'ils acceptent un alignement 32 bits ?

    Voilà ce que j'utilisais :

    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
     TParamsOpe = packed record     {Liste des paramètres liés à chaque opérateur}
        NoOrdreOpe: SmallInt;                       {Numéro d'ordre de l'opérateur}
        ClasseOpe: SmallInt;                                {Classe de l'opérateur}
        TypeOpe: SmallInt;                     {Type de l'opérateur dans la classe}
        PosOpe: TCoordXY;            {Position de l'opérateur sur le plan "schéma"}
        Int1, Int2, Int3, Int4: SmallInt;               {Paramètres de type Entier}
        Text1: string[14];             {Nom de l'unité pour les entrées et sorties}
        Hierarchique: Boolean;                   {Indique si l'opé est un SuperOpe}
        Hierarchise: Boolean;    {Indique si l'opé est dans un groupe hiérarchique}
        case SmallInt of
     1:(NomOpe: string16;                                      {Nom de l'opérateur}
        Val1, Val2, Val3, Val4, Val5,
        Val6, Val7, Val8, Val9: Extended;               {Paramètres de type Etendu}
        NoOpeSub: array[0..3] of SmallInt; {Numéros des Sub opérateurs d'interface}
                        {[0] est la sortie, [1] à [3] sont les éventuelles entrées}
        NoOpeSup: SmallInt;                                    {Numéro du SuperOpe}
        Test1, Test2, Test3, Test4: Boolean);          {Paramètres de type Booléen}
     2:(Txt: string[NbChrTxt]);{Variant de type string pour les opérateurs "Texte"}
     3:(Interdit: string[NbChrTxt-(43+1)];                         {Zone interdite}
        Text0: string[43]);  {Nom affichage si sortie principale, NomDLL si FctExt}
     4:(Bloque: string[56];
        Text2: string[53];
        AdrFchExcit: PFichierCourbe);
     5:(NomEtat: string16;                                     {Nom de l'opérateur}
        E01, E02: Single;
        SProp: Word;
        PEch: Extended;
        A11, A12, A21, A22, B11, B12, B21, B22: Single;
        C11, C12, C21, C22, D11, D12, D21, D22: Single);
      end;
    Cordialement.

    Pierre.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 171
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Je dirais que le moyen le plus simple de récupérer les anciens fichiers est de les faire convertir par l'ancien programme. Pour ma part, c'est comme ça que je m'y prendrais.

    Bonne chance !

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    ... Je dirais que le moyen le plus simple de récupérer les anciens fichiers est de les faire convertir par l'ancien programme. Pour ma part, c'est comme ça que je m'y prendrais. ...
    Certes, j'ai lancé mon application 32 bits sur mon PC 64 bits et y ai ouvert mes anciens fichiers sans problème. Mais de là, comment faire pour les enregistrer sous un format 64 bits, si tant est que ce soit le problème.

    Cela voudrait dire que sous win32, dans mon ancienne application, je puisse programmer un packed record compatible 64 bits ???

    Une solution autonome ne requérant pas l'ancienne, consisterait à ouvrir mes fichiers avec ma version 64 bits mais avec un packed record 32 bits, mais comment le ferais-je ?

    Cordialement.

    Pierre

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 171
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Certes, j'ai lancé mon application 32 bits sur mon PC 64 bits et y ai ouvert mes anciens fichiers sans problème. Mais de là, comment faire pour les enregistrer sous un format 64 bits, si tant est que ce soit le problème.

    Cela voudrait dire que sous win32, dans mon ancienne application, je puisse programmer un packed record compatible 64 bits ???
    Eh bien, oui, je pense, à moins qu'il y ait quelque chose qui m'échappe. Il me semble que la seule différence vient des types de données qui ont le même nom mais qui sont en réalité différents, comme integer par exemple. Après, peut-être que je dis n'importe quoi. J'avoue que je ne sais pas vraiment ce que c'est qu'un packed record. Peut-être quelqu'un va-t-il nous l'expliquer.

    Sinon, une autre solution serait de passer par un format intermédiaire pour récupérer vos anciens fichiers, un format passe-partout.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 171
    Billets dans le blog
    9
    Par défaut
    Pourquoi pas déclarer un type enregistrement avec les mêmes champs, mais non "packed" ?

    J'ai juste un doute sur le type PFichierCourbe.

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    ... Sinon, une autre solution serait de passer par un format intermédiaire pour récupérer vos anciens fichiers, un format passe-partout.
    Sauf s'il y a moyen de rendre "compatibles" des "packed record 32 et 64 bits", effectivement, la solution est de passer par un fichier type texte.

    Cordialement.

    Pierre

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Les pointeurs n'ont pas la même taille dans les 2 environnements (PFichierCourbe en est-il un ?), et j'ai un souvenir étonnant, que je viens de confirmer : pour un souci de compatibilité (inter-OS ?) le type Extended du FPC 64 Bits est codé sur 8 octets au lieu des 10 attendus par l'utilisateur du FPC 32 Bits !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Eh bien, oui, je pense, à moins qu'il y ait quelque chose qui m'échappe. Il me semble que la seule différence vient des types de données qui ont le même nom mais qui sont en réalité différents, comme integer par exemple. Après, peut-être que je dis n'importe quoi. J'avoue que je ne sais pas vraiment ce que c'est qu'un packed record. Peut-être quelqu'un va-t-il nous l'expliquer.
    Salut la différence en un Record et un packed record c'est que le Record sera aligné en mémoire ; le compilateur pour rajouter des octets pour y parvenir, ce qui permettra d'accélérer les accès en mémoire, tandis le packed record prendra exactement le nombre d'octets qu'il contient. Moins de place en mémoire mais les performances d'accès sont réduit.
    il est d'usage lors de l'utilisation d'un record de placer ses propriétés suivant leur taille dans l'ordre descendant : du plus grand au plus petit.

    Note FPC dispose d'un commande préprocesseur : {$PackRecords X} pour contrôler l'alignement des données dans un "record"

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Je viens de voir cette unité pour Delphi qui ajoute un type TExtendedX87 compatible avec le Extended du 32 Bits. A tester !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

Discussions similaires

  1. Utiliser des variables pour un record ?
    Par Nohak_ dans le forum PL/SQL
    Réponses: 2
    Dernier message: 14/04/2014, 15h57
  2. Réponses: 5
    Dernier message: 25/03/2008, 11h31
  3. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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