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

C Discussion :

Problème de passage d'adresses


Sujet :

C

  1. #1
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut Problème de passage d'adresses
    Bonjour à tous.

    Je suis en train de développer une DLL, mais je ne suis pas très très calé en C.

    Je dois écrire une fonction à laquelle je passe plusieurs paramètres, dont une chaîne.

    Voilà le prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DLLIMPORT int __stdcall SendReceive ( LPCSTR sendBuffer, LPSTR receiveBuffer);
    En gros, je reçois une chaine dans sendBuffer. J'exécute une commande dans une autre DLL et je dois passer le résultat (aussi une chaine) dans receiveBuffer, et renvoyer la taille du résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DLLIMPORT int __stdcall SendReceive ( LPCSTR sendBuffer, LPSTR receiveBuffer)
    {
      char * message;
      //Je vous épargne le code dans lequel j'appelle l'autre DLL
      //Je suis sûr que ça s'exécute bien, car ma chaine Message
      //est bien affectée au final
    
      receiveBuffer = message;
      return strlen(receiveBuffer);
    }
    Voilà le code, en gros.. Le problème maintenant...

    J'appelle cette fonction depuis un programme externe, fait en windev.
    Je lui passe en paramètres la commande, et l'adresse de la chaine chaine qui doit contenir la réponse.

    Pour ceux qui connaissent windev, j'appelle la fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Info(API("maDll.dll", "SendReceive", "OPEN", &sReponse) 
    /*en windev, le & sert à passer une adresse, comme en C, 
    mais les pointeurs n'existent pas à proprement parler*/
    La fonction me retourne bien la taille de la chaîne, et elle est correcte. Seulement quand j'affiche le contenu de sReponse, bah j'ai rien... La chaîne est aussi vide que ma tête en ce moment ^^

    Je débute en C, j'ai bien regardé la FAQ et ça me semble correct, donc où est-ce que je pêche ??

    Merci d'avance pour vos réponses

    PS : les pointeurs, c'est super, mais c'est pas facile à utiliser, on a vite fait de s'y perdre au début

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    strcpy() je pense

  3. #3
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Gruik
    strcpy() je pense
    Oui, ou strdup(), ça dépend si la chaîne est allouée en statique ou pas.

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bah d'apres le nom "receiveBuffer", la zone de sortie est prete, donc il faudrait juste ecrire dedans

    Faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    receiveBuffer = message;
    change la valeur du paramètre, et la valeur du paramètre n'est qu'une adresse qui pointe vers le buffer, là où devrait etre mis les caractères.
    Il faut copier les caractères dedans et strcpy() est fait pour ça.

  5. #5
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Ok. Je retourne me coucher alors

  6. #6
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut
    Oki, merci à tous, je vais aller tester ça

  7. #7
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut
    Oki, ça marche avec le strcpy, merci beaucoup

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

Discussions similaires

  1. Problème de passage par adresse dans un sous-programme
    Par Maskeren dans le forum Débuter
    Réponses: 11
    Dernier message: 17/05/2015, 18h11
  2. Problème de passage par adresse.
    Par azmodai dans le forum C
    Réponses: 4
    Dernier message: 15/05/2010, 09h55
  3. Réponses: 3
    Dernier message: 29/06/2007, 17h18
  4. Réponses: 19
    Dernier message: 09/06/2006, 10h03
  5. problème de passage de texte avec getvariable
    Par VincentB dans le forum Flash
    Réponses: 2
    Dernier message: 12/01/2004, 18h35

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