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 :

Traitement d'un char* renvoyé par une DLL en C++


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Traitement d'un char* renvoyé par une DLL en C++
    Salut !

    ben comme c'est écrit dans le sujet, j'ai des problèmes pour récupérer le résultat qui est renvoyé par la fonction contenue dans la DLL.

    J'ai déclaré un type pointeur sur les strings et quand j'appelle ma fonction en affectant le résultat à une variable de type PString, ça fonctionne nickel.

    Le hic, c'est dès que je veux afficher la chaine de caractère que ça ne va plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(maVarPointeur^);
    A ce moment-là, j'ai une exception EAccessViolation ...

    comment est-ce que je peux faire ??

    merci

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Déjà si tu utilises une dll écrite en C ou C++ oublie le type String, car c'est un type seulement utilisé en Pascal et totalement incompatible avec le PChar.

    Donne-nous la déclaration de la fonction en C ( et non pas sa traduction en Pascal ), et donne aussi la déclaration que tu as fait dans Delphi. On pourra alors te dire ce qui ne va pas...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    ok.. voilà les déclarations des fonctions

    C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* __stdcall lireVal(LPWSTR lp);
    Delphi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function lireLPWSTR(LPWSTR : Integer): PString; stdcall;
     
    implementation
    function lireLPWSTR; external 'utilsLPWSTR.dll' name 'lireVal';

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Il y a plusieurs erreurs dans ta traduction :

    en C on met le type avant la variable, par exemple avec Delphi :
    Est écrit en C
    donc ce n'est pas LPWSTR le paramètre mais lp.

    ensuite LPWSTR n'est pas un type entier mais un type pointeur vers une chaine WideString mais à zéro terminal.

    Le résultat de la fonction est une chaine certe, mais en C les chaines sont toujours à zéro terminal. Char* est un pointeur vers un caractère, avec Delphi c'est un PChar qu'il faut utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function lireLPWSTR(lp : LPWSTR): PChar; stdcall;

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    C bon, ça marche !! MERCI!

    PS:

    Je savais pas que le type LPWSTR existait aussi en Delphi.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/08/2013, 17h42
  2. Réponses: 6
    Dernier message: 14/01/2008, 16h30
  3. L'adresse d'un char renvoyé par une fonction ?
    Par tintin72 dans le forum C++
    Réponses: 5
    Dernier message: 17/10/2007, 11h05
  4. Réponses: 2
    Dernier message: 08/10/2006, 11h44
  5. Réponses: 3
    Dernier message: 27/09/2006, 15h38

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