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 :

Traduction c++ delphi [FAQ]


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut Traduction c++ delphi
    comment je peux traduire en delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    #ifndef _VER
    #define LRLIB_C_API extern "C"
    #else
    #define LRLIB_C_API
    #endif

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut


    un truc dans ce genre le seul probleme
    c'est que le extern "C" indique si la methode
    vient de l'exterieur ou pas dans ton cas je pense que tu peut l'oublier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {$ifndef _VER}
     const 
        LRLIB_C_API := 'extern "C"' ;<== ???
    {$else}
     const 
        LRLIB_C_API := ''; <== ???
    {$endif}
    @+ Phil

  3. #3
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    en faite je traduit des .h pour charger une DLL ecrite en C++ dans delphi ,
    donc je pense que j'en aurai besoin non ?

  4. #4
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    et pour traduire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    const char *OmPlrGetErrorStringA(OmPlrError error);
    const wchar_t *OmPlrGetErrorStringW(OmPlrError error);
     
    #ifdef UNICODE
    #define OmPlrGetErrorString OmPlrGetErrorStringW
    #else
    #define OmPlrGetErrorString OmPlrGetErrorStringA
    #endif
    j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      OmPlrGetErrorStringA: function(error: OMPLRERROR): PCHAR ;cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
    var
      OmPlrGetErrorStringW: function(error: OMPLRERROR): WCHAR_T ;cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
     
    {$IFDEF UNICODE}
    const
      OmPlrGetErrorString = OmPlrGetErrorStringW;
    {$ELSE}
    const
      OmPlrGetErrorString = OmPlrGetErrorStringA;
    {$ENDIF}
    mais ca compile pas !

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 061
    Points
    7 061
    Par défaut
    Citation Envoyé par coax81 Voir le message
    mais ca compile pas !
    Et ça dit quoi ?

  6. #6
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    il dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Pas assez de paramètres originaux
    pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const
      OmPlrGetErrorString = OmPlrGetErrorStringA;

  7. #7
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Juste une chose, quand tu as fait les modifs est-ce que tu as ajouté les options de compilation dans les options de ton projet ?

  8. #8
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    vous voulez dire quoi par options de compilation ? j'ai rien changé normalement.

  9. #9
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par coax81 Voir le message
    vous voulez dire quoi par options de compilation ? j'ai rien changé normalement.
    Généralement, si tu veux que la compilation traite des lignes et pas d'autres. Genre compiler
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const
      OmPlrGetErrorString = OmPlrGetErrorStringW;
    et pas
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const
    OmPlrGetErrorString = OmPlrGetErrorStringA;
    Tu vas dans project->options->directories/conditionals->conditional defines et tu définis UNICODE. Si t'en a plusieurs, tu les sépares par des ; et après tu ne compile pas directement, tu fais build all (tout construire). Mais je ne sais pas trop si cela va résoudre ton problème.

  10. #10
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    UNICODE est une directive de Visual C++, indiquant qu'on est dans un projet Unicode. Vu que Delphi n'est pas Unicode, on oublie, et on fait comme si UNICODE n'était pas définie.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Mui,
    Citation Envoyé par coax81 Voir le message
    et pour traduire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    const char *OmPlrGetErrorStringA(OmPlrError error);
    const wchar_t *OmPlrGetErrorStringW(OmPlrError error);
     
    #ifdef UNICODE
    #define OmPlrGetErrorString OmPlrGetErrorStringW
    #else
    #define OmPlrGetErrorString OmPlrGetErrorStringA
    #endif
    j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      OmPlrGetErrorStringA: function(error: OMPLRERROR): PCHAR ;cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
    var
      OmPlrGetErrorStringW: function(error: OMPLRERROR): WCHAR_T ;cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
     
    {$IFDEF UNICODE}
    const
      OmPlrGetErrorString = OmPlrGetErrorStringW;
    {$ELSE}
    const
      OmPlrGetErrorString = OmPlrGetErrorStringA;
    {$ENDIF}
    mais ca compile pas !
    Aïe.

    Attention à ne pas confondre les constantes de Delphi et le travail du pré-processeur C ou C++

    Pour Delphi,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const
      OmPlrGetErrorString = OmPlrGetErrorStringW;
    signifie que tu crées un constante OmPlrGetErrorString qui prend la valeur OmPlrGetErrorStringW.
    Et bien entendu, comme OmPlrGetErrorStringW est en fait une fonction, Delphi ne veut pas de cette définition.

    Il n'y a rein qui remplacer aussi simplement un #define du C ou C++, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define OmPlrGetErrorString OmPlrGetErrorStringW
    qui est une directive pour le pré-compilateur, l'informant de remplacer toutes les occurrences de OmPlrGetErrorString par OmPlrGetErrorStringW, cela au niveau élémentaire du texte du code source, avant que la compilation proprement dite sit effectuée.

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Mui,
    Citation Envoyé par coax81 Voir le message
    et pour traduire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    const char *OmPlrGetErrorStringA(OmPlrError error);
    const wchar_t *OmPlrGetErrorStringW(OmPlrError error);
     
    #ifdef UNICODE
    #define OmPlrGetErrorString OmPlrGetErrorStringW
    #else
    #define OmPlrGetErrorString OmPlrGetErrorStringA
    #endif
    j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      OmPlrGetErrorStringA: function(error: OMPLRERROR): PCHAR ;cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
    var
      OmPlrGetErrorStringW: function(error: OMPLRERROR): WCHAR_T ;cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
     
    {$IFDEF UNICODE}
    const
      OmPlrGetErrorString = OmPlrGetErrorStringW;
    {$ELSE}
    const
      OmPlrGetErrorString = OmPlrGetErrorStringA;
    {$ENDIF}
    mais ca compile pas !
    Aïe.

    Attention à ne pas confondre les constantes de Delphi et le travail du pré-processeur C ou C++

    Pour Delphi,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const
      OmPlrGetErrorString = OmPlrGetErrorStringW;
    signifie que tu crées un constante OmPlrGetErrorString qui prend la valeur OmPlrGetErrorStringW.
    Et bien entendu, comme OmPlrGetErrorStringW est en fait une fonction, Delphi ne veut pas de cette définition.

    Il n'y a rein qui remplacer aussi simplement un #define du C ou C++, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define OmPlrGetErrorString OmPlrGetErrorStringW
    qui est une directive pour le pré-compilateur, l'informant de remplacer toutes les occurrences de OmPlrGetErrorString par OmPlrGetErrorStringW, cela au niveau élémentaire du texte du code source, avant que la compilation proprement dite soit effectuée.

  13. #13
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 061
    Points
    7 061
    Par défaut
    Citation Envoyé par droggo Voir le message
    Il n'y a rein qui remplacer aussi simplement un #define du C ou C
    Bin, l'équivalent Delphi, c'est pas {$DEFINE} ?

  14. #14
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Non : les define de Delphi ne servent qu'à faire de la compilation conditionnelle.

  15. #15
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1

  16. #16
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    si delphi ne reconnais pas les UNICODE alors j'enleve toutes les lignes à l'interieure de la définition de cette directive !!!

    j'enleve les fonctions foncW et je ne laisse que les foncA

  17. #17
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 546
    Points
    546
    Par défaut
    Bonjour,
    il est vrai que définir ces fonctions en version ansi ou unicode selon une directive de compilation n'a pas beaucoup d'intérêt, car pour l'utiliser il faudrait que toutes les autres fonctions le soient ainsi que les chaines de caractères.

    Pour l'utiliser en C++ il faut déjà toujours utiliser des macro de type _T("Ma chaine") (remplaçant par "Ma chaine" en ansi et L"Ma chaine" en unicode) ; ceci pour pouvoir compiler un programme en ANSI puis en UNICODE sans changer le code (juste en définissant ou non la macro UNICODE).

    Néanmoins cela reste réalisable (pour le sport) en Delphi avec des const :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      function OmPlrGetErrorStringA(error: OMPLRERROR): PCHAR   ; stdcall ; external NomLib name 'OmPlrGetErrorStringA';
      function OmPlrGetErrorStringW(error: OMPLRERROR): PWCHAR  ; stdcall ; external NomLib name 'OmPlrGetErrorStringW';
     
    type
      TOmPlrGetErrorStringA = function(error: OMPLRERROR): PCHAR  ;  stdcall ;
      TOmPlrGetErrorStringW = function(error: OMPLRERROR): PWCHAR ;  stdcall ;
    const
    {$IFDEF UNICODE}
      OmPlrGetErrorString : TOmPlrGetErrorStringW = OmPlrGetErrorStringW;
    {$ELSE}
      OmPlrGetErrorString : TOmPlrGetErrorStringA = OmPlrGetErrorStringA;
    {$ENDIF}
    Mais ceci est aussi possible (et peut-être plus simple car réutilisable pour toutes les fonctions) :
    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
    const
      VERS_WIDE = 'W';
      VERS_ANSI = 'A';
      {$IFDEF UNICODE}
         VERS_TCHAR = VERS_WIDE;
      {$ELSE}
         VERS_TCHAR = VERS_ANSI;
      {$ENDIF}
    type
      {$IFDEF UNICODE}
         PTChar = PWideChar;
      {$ELSE}
         PTChar = PAnsiChar;
      {$ENDIF}
     
      function OmPlrGetErrorStringA(error: OMPLRERROR): PAnsiChar; stdcall ; external NomLib name 'OmPlrGetErrorString'+VERS_ANSI;
      function OmPlrGetErrorStringW(error: OMPLRERROR): PWideChar; stdcall ; external NomLib name 'OmPlrGetErrorString'+VERS_WIDE;
      function OmPlrGetErrorString (error: OMPLRERROR): PTChar   ; stdcall ; external NomLib name 'OmPlrGetErrorString'+VERS_TCHAR;

  18. #18
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Si tu laisses tes instructions sous des {$ifdef OPTION}. Sois tu définis OPTION pour que le programme "passe" dans les lignes de code écrites sous OPTION, Soit tu ne la définis pas pour compiler les autres lignes (càd ceux du {$else})
    Par exemple en écrivant :
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    {$ifdef OPTION}SuiteInstructions1{$else}SuiteInstructions2{$endif}
    Et que dans les options de ton projet tu définis OPTION. Il n'y a que SuiteInstructions1 qui sera compiler, sinon c'est SuiteInstructions2.

  19. #19
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Citation Envoyé par coax81 Voir le message
    si delphi ne reconnais pas les UNICODE alors j'enleve toutes les lignes à l'interieure de la définition de cette directive !!!

    j'enleve les fonctions foncW et je ne laisse que les foncA
    Oui.

Discussions similaires

  1. Encore un problème de traduction C++ delphi
    Par chuck33 dans le forum Langage
    Réponses: 5
    Dernier message: 12/09/2007, 14h14
  2. Traduction en Delphi d'une structure
    Par skywaukers dans le forum Delphi
    Réponses: 6
    Dernier message: 14/06/2007, 00h07
  3. Traduction C++/Delphi DLL et function Callback
    Par Crafton dans le forum Langage
    Réponses: 12
    Dernier message: 23/02/2006, 09h55
  4. TRaduction C++ => Delphi VOID ??
    Par escafr dans le forum Langage
    Réponses: 6
    Dernier message: 20/02/2003, 10h39
  5. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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