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

Langage Delphi Discussion :

Conversion type C vers Delphi


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut Conversion type C vers Delphi
    Bonjour,

    Je cherche à utiliser un type déclaré en C, à partir d'une doc pour une DLL, mais je pêche depuis un bon moment,
    pour mettre ça sous Delphi XE7.
    Y aurait il un ame avertie qui pourrait m'aider là dessus:
    C'est bien sur le union {...} qui me pose problème

    Code c++ : 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
    typedef struct {
     
     
        int             iSize;
        int             iVersion;
        int             iRet;
        DWORD           dwNotifyType;
        DWORD           dwTimeout;
        union {
            LPHANDLE        lphNotifyEvent;
            HWND            hNotifyWnd;
        } uNotifyHandle;
        HWND            hProgressWnd;
        WORD            wErrorEject;
        BYTE            bBuzzerHz[MF_BUZZER_TYPE_MAX];
        BYTE            bBuzzerCount[MF_BUZZER_TYPE_MAX];
        BYTE            bUseNVMemory;
        char            cPortName[256];
        WORD            wSuccessEject;
    } ABASE, *LP_ABASE;

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    J'avais entendu parler de http://rvelthuis.de/programs/convertpack.html
    mais je n'ai pas testé.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Tu t'en fiches de l'union

    Parce qu'il sert à regrouper dans un espace (du type le plus long) plusieurs types.
    Donc:
    • Soit tu crées 2 variables
    • Soit tu crées 1 seule variable de type long (parce qu'il me semble que HWND c'est un unsigned long) qui aura une double signification (mais 1 seule à la fois)

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonsoir

    L'union en C est repris en tant que partie variable des enregistrement en Delphi: Le case dans la structure record.
    Voir l'aide pour les détails.

    De ma compréhension des deux langages, le principe du stockage en mémoire est le même. Faut faire attention aux points classiques (que je maîtrise mal).

    Bonne soirée

    Delias

  5. #5
    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
    Hormis les solutions proposées, fort judicieuses, je ne suis pas sûr que Delphi permette une déclaration en un seul temps.
    Pour coller au plus près au code C, il faudrait créer un premier type enregistrement à partie variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type 
      TNotifyHandle = record
        case Boolean of
          True:  ( lphNotifyEvent: LPHANDLE );
          False: ( hNotifyWnd:     HWND );
        end;
      end;
    puis l'intégrer dans le second :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type 
      LP_ABASE = ^ABASE;
      ABASE = record
         iSize : int;
         //...
         uNotifyHandle: TNotifyHandle; // ici !
         hProgressWnd: HWND;
         //...
       end;
    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 !

  6. #6
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut
    Merci à tous, pour votre aide.

    La solution via un "case" m'a permis de me rappeler la doc papier de Delphi 6
    et la proposition de Tourlourou colle parfaitement aux explications.

    Je vais tenter ça, dans ce sens pour "coller" au C.

    D'autre part,
    Ce type de déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // en C
    BYTE            bBuzzerCount[MF_BUZZER_TYPE_MAX];
    //ou en VB
    bBuzzerCount(1 To MF_BUZZER_TYPE_MAX) As Byte
    Vous la voyez comment en Delphi ?
    Parce que tout ce que je tente est rejeté par le compilateur.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bBuzzerCount: array[0..MF_BUZZER_TYPE_MAX-1] of byte;
    // ou
    bBuzzerCount: array[1..MF_BUZZER_TYPE_MAX] of byte;
    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 !

Discussions similaires

  1. Delphi 7, Conversion de type Shortstring vers int
    Par Marc_3 dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2013, 12h34
  2. conversion type Image vers tableau
    Par elektronik-17 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/08/2008, 00h47
  3. Réponses: 1
    Dernier message: 11/05/2007, 18h18
  4. Conversion Delphi 2 vers Delphi 2005
    Par ROYER dans le forum Bases de données
    Réponses: 10
    Dernier message: 25/11/2005, 18h45
  5. conversion d'un type Extended vers un string
    Par matterazzo dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2005, 19h22

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