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

 Delphi Discussion :

Problème de passage PChar à une DLL


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut Problème de passage PChar à une DLL
    Bonjour

    J'ai un souci avec le passage d'un PChar à une DLL :

    Voici le code de la fonction DLL que je veux appeler (elle me renseigne sur le numéro de version de la DLL):
    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
    type
      Tcodereturn = longint;
      TSZ         = pchar;
     
    function VMK_version (SZversion : TSZ): Tcodereturn; stdcall;
    var
       str : string;
       status : longint;
    begin
    str:=ikimal_version;
    status:=length(str);
    strbufsize(SZversion);
    strPcopy(SZversion,str); 
    result:=status;
    end;
    Et voici comment j'y fais appel dans un petit programme de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type
      Tcodereturn = longint;
      TSZ         = PChar;
    [...]
    var
      str : TSZ;
    [...]
    begin;
      VMK_version(str);
    Quand je fais ca, j'ai une erreur d'accès d'adresse mémoire dans la DLL sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strPcopy(SZversion,str);
    J'ai essayé en déclarant ma variable str comme une string et en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VMK_version(pchar(str));
    mais j'ai la même erreur.

    La DLL est utilisée dans plein d'application, donc je ne pense pas que le problème vienne de la, mais plutôt de la façon dont j'y fais appel.
    Petit précision je travaille avec Turbo Delphi sous Vista.

    Est ce que qq un a une idée?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 338
    Points
    13 338
    Par défaut
    Il doit te manquer le stdcall du côté de ton application.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut
    Il ne me semble pas, j'ai bien mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function VMK_version (SZversion : TSZ): Tcodereturn; STDCALL; external 'ikimal.dll' name 'VMK_version';
    au début de mon programme de test...

    Mais j'ai peut être oublié qq chose d'autre ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 338
    Points
    13 338
    Par défaut
    Es-tu sûr que SZversion est assez grand pour recevoir Str ? On ne voit pas où tu alloues ton buffer.

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Es-tu sûr que SZversion est assez grand pour recevoir Str ?
    +1

    De plus l'appel à cette fonction ne sert à rien.
    @+

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    je te recommande la lecture du chapitre 19 (page 497) du livre "Delphi 7 Studio" aux éditions Eyrolles.

    Et comme Eyrolles est vachement sympa, ledit chapitre est disponible en ligne !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup pour vos réponses.
    Le problème c'est bien le pointeur que je passais à la DLL n'avait pas de d'espace mémoire réservé.

    Merci pour le lien... j'ai (presque) tout lu

    Petite question :
    Toutes les fonctions de la DLL qui renseignent un PChar ne font pas l'allocation mémoire nécessaire. C'est au programme appelant de faire l'allocation, ne sachant pas a l'avance la taille nécessaire. Est ce que ca vous parait normal ?

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par yupa Voir le message
    Merci beaucoup pour vos réponses.
    Le problème c'est bien le pointeur que je passais à la DLL n'avait pas de d'espace mémoire réservé.

    Merci pour le lien... j'ai (presque) tout lu

    Petite question :
    Toutes les fonctions de la DLL qui renseignent un PChar ne font pas l'allocation mémoire nécessaire. C'est au programme appelant de faire l'allocation, ne sachant pas a l'avance la taille nécessaire. Est ce que ca vous parait normal ?
    tu n'as donc pas "tout" lu notamment les pages 499 et 500

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

Discussions similaires

  1. Problème d'importation d'une DLL dans CVI
    Par samanderson dans le forum Windows
    Réponses: 16
    Dernier message: 16/08/2006, 14h45
  2. [Win32]Problème au chargement d'une DLL C++
    Par FamiDoo dans le forum MFC
    Réponses: 22
    Dernier message: 05/07/2006, 11h10
  3. [MFC] Problèmes d'inclusion d'une DLL
    Par CaptnB dans le forum MFC
    Réponses: 1
    Dernier message: 12/05/2006, 18h01
  4. [VB] Problème de chargement d'une DLL
    Par Elijha dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 09h24
  5. Problème de création d'une dll...
    Par adrien954 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/10/2005, 10h46

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