Traduction C++ => Delphi type Union ?

Signaler
Messages postés
25
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
1 décembre 2012
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Bonjour,
en effet, je suis au bord du suicide acr je ne vois pas comment traduire ce petit bout de codes C en Delphi ?

Le voici :

typedef union {
struct {
WORD signature;
WORD numero;
} ordinaire;
struct {
WORD signature;
WORD numero;
WORD fonction[CICO_NOMBRE];
} cico;
} BDA_INIT;

Si quelqu'un est suffisament douée en C & en Dephi merci pour le coup de pouce.

5 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
C'est ce que l'on appelle un enregistrement avec partie variable en Pascal.
Une manière simple de traduire ressemblerait à celà :
const
  CICO_NOMBRE = 100;
type
  TOrdinaire = record
    signature, numero : word;
  end;

  Tcico = record
    signature, numero : word;
    fonction : array[1..CICO_NOMBRE] of word;
  end;

  TBDA_INIT = record
    ordinaire : Tordinaire;
    cico : Tcico;
  end;

mais ce serait une mauvaise approche en termes de gestion de mémoire (double réservation de mémoire pour signature et numero) et un vrai casse-tête dans le code.
La solution suivante est meilleure et plus dans l'esprit de la définition en C ci-dessus :
const
  CICO_NOMBRE = 100;

type
  TBDA_INIT2 = record
    signature : word;
    numero : word;
    case selecteur : boolean of
      True : (fonction : array[1..CICO_NOMBRE] of word);
      False : (); // <- facultatif
  end;


Nous retrouvons bien les parties communes signature et numero. le tableau nommé fonction faisant déclaré dans la partie variable doit être déclaré après les membres "fixes".
May Delphi be with you
Messages postés
25
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
1 décembre 2012

N'y a pas, si je fais cela, un octet pour stokcer la valeur du selecteur de plus qui sera pris par rapport à la version C ?
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Si, évidemment. Aussi, je pense que tu peux te dipenser du sélecteur de champ dans le cas présent.
May Delphi be with you
Messages postés
25
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
1 décembre 2012

C'est ce que j'avais fait, j'ai fait çà :

> > BDA_INIT = record
> > signature: word;
>> numero: word;
> > fonction : array[1..CICO_NOMBRE] of word;
> > end;

Mais de toute manière, la sources que j'essaye de Traduire est une Dll en C, que j'aimerai passé sous DELPHI, mais
j'ai des tas de problème, puis-je t'envoyer le Sources & ce que j'ai fait pour que tu me dises ce que tu en penses ?
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Si la DLL écrite en C fonctionne, il n'y pas de raison pour la réécrire avec Delphi.
Il faut simplement faire attention à respecter les conventions d'appel qui ne sont pas les mêmes par défaut en C et en Pascal.
May Delphi be with you