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

MFC Discussion :

Dll mfc : Valeur de retour


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Par défaut Dll mfc : Valeur de retour
    Bonjour,

    Je cherche à comprendre ce que je fais. J'ai cree un dll mfc qui permettera de retourner la date et heure courante. Voyant que le premier cas ne marchait pas, j'ai modifié cette fonction et là ça fonctionne bien !
    Est ce que c'est un problème de partage mémoire dll / programme ?

    1er cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    __declspec(dllexport) void JGetCurrentDateTime(char* TimeFormat, char* retValue)
    {
       char str_date_time[50];
       time(&n_DateTime);
       strftime(str_date_time,50,n_TimeFormat,localtime(&n_DateTime));
       retValue = (char*) malloc(strlen(str_date_time) + 8);
       strcpy(retValue,str_date_time);
    }
    2ieme cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    __declspec(dllexport) char* JGetCurrentDateTime2(char* TimeFormat)
    {
       char str_date_time[50];
       time(&n_DateTime);
       strftime(str_date_time,50,n_TimeFormat,localtime(&n_DateTime));
       char *retValue;
       retValue = (char*) malloc(strlen(str_date_time) + 8);
       strcpy(retValue,str_date_time);
       return retValue;
    }
    Dans le second cas, le programme principale reçoit bien la valeur, alors que dans le premier cas la valeur de retour reste toujours vide.

    Est ce que quelqu'un aurait un expliquation ?

    Merci d'avance.

  2. #2
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Salut,

    Dans ton 1er cas, il faut que tu donnes une référence sur le pointeur retValue et non la valeur du pointeur retValue.

    tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    __declspec(dllexport) void JGetCurrentDateTime(char* TimeFormat, char** retValue)
    {
      ...
      *retValue=(char*) malloc(strlen(str_date_time) + 8);
      strcpy(*retValue,str_date_time);
    }
    dans ce cas, c'est un pointeur sur un pointeur : tu donnes l'endroit ou ranger le pointeur de la nouvelle chaine

    ou alors comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    __declspec(dllexport) void JGetCurrentDateTime(char* TimeFormat, char*& retValue)
    {
      // c'est pareil que ton code
    }
    ou là tu donnes une référence sur ton pointeur. d'un point de vue code généré par le compilateur, c'est exactement la meme chose.

    @+

  3. #3
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    bonjour,

    Si tu utilises bien les MFC tu as la classe COleDateTime pour recupérer la date courante au lieu de te mêler les pinceaux avec time(), localtime et consor...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    extern "C" void WINAPI AfxGetCurrentTime(CString* pstrCurTime)
    {
            COleDateTime now = COleDateTime::GetCurrentTime();
            *pstrCurTime = now.Format("%d %b %Y");
    }
    et puis ben..., une fonction d'exportation pour récupérer la date courante n'est pas très utile je trouve, car la méthode static "COleDateTime::GetCurrentTime()" peut être appelée n'importe dans ton code que ce soit dans ta dll ou ton exe.


  4. #4
    Membre averti
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informatique industrielle

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Par défaut
    Salut

    Si dans ton premier cas retValue est nul c'est parce qu'il te manque & (comme te dis stephdim).

    En fait & veut dire paramètre d'entrée/sortie. Alors que si tu ne met rien la variable est considérée comme un paramètre d'entré.

    Voila deux petit exemple pour que tu comprenne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Programme principal
    x = 1;
    Test (x);
    cout<<"x = "<<x;
    // Sous programme
    void Test (int X)
    {
    x = x + 1;
    }
    dans cet exemple tu aura à l'écran x =1

    alors que dans l'exemple qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Programme principal
    x = 1;
    Test (x);
    cout<<"x = "<<x;
    // Sous programme
    void Test (int& x)
    {
    x = x + 1;
    }
    Tu aura à l'écran x = 2

Discussions similaires

  1. [WD14] Dll Delphi paramétré avec valeur de retour
    Par mail.spam dans le forum WinDev
    Réponses: 2
    Dernier message: 01/07/2009, 11h49
  2. fonction operator, valeur de retour
    Par butch dans le forum C++
    Réponses: 21
    Dernier message: 20/09/2004, 10h30
  3. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16
  4. Valeur de retour d'une procédure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 16/04/2004, 16h45
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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