Traduction C++ => Delphi type Union ?

uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 1 décembre 2012 - 20 août 2003 à 14:25
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 21 août 2003 à 18:26
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

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 août 2003 à 21:11
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
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 1 décembre 2012
21 août 2003 à 10:30
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 ?
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 août 2003 à 13:34
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
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 1 décembre 2012
21 août 2003 à 14:04
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 ?
0

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

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 août 2003 à 18:26
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
0
Rejoignez-nous