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 :

Fonction qui marche seule mais plus dans un programme


Sujet :

C

  1. #1
    Membre régulier Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Points : 86
    Points
    86
    Par défaut Fonction qui marche seule mais plus dans un programme
    Salut,

    Je suis confronté à un problème stupide!
    J'ai créé une fonction qui sert à lister les IP actuelles allouées au PC.

    Cette fonction est celle-ci (main.c, et ne pas oublier -lws2_32 dans l'éditeur de liens) :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdio.h>
    #include <stdlib.h>
     
    #include <stdio.h>
    #include <conio.h>
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib" )
     
    typedef struct StockageIPs
    {
            int nbips;
            char *ip[10]; // On limite à 10 ips
    } StockageIPs;
     
    StockageIPs RecupererMesIPs();
     
     
    int main(int argc, char *argv[])
    {
    StockageIPs variable;
     
     variable = RecupererMesIPs();
     
     printf("%s",variable.ip[0]);
      system("PAUSE");	
      return 0;
    }
     
    StockageIPs RecupererMesIPs()
    {
         char NomDeMachine[64];
         int i;     
         HOSTENT* InterfacesReseau;
         SOCKADDR_IN valip;
         StockageIPs MesIPs;
     
         WSADATA WSAData;
         WSAStartup(MAKEWORD(2,0), &WSAData);
     
         gethostname(NomDeMachine, sizeof(NomDeMachine)); // On recupere le nom de la machine
         InterfacesReseau = gethostbyname(NomDeMachine); // A partir du nom on extrait les infos des interfaces
     
         for (i=0; InterfacesReseau->h_addr_list[i] != NULL; i++) // On teste si une IP est attribuée a chaque interface
         {
             memcpy(&valip.sin_addr.s_addr, InterfacesReseau->h_addr_list[i], InterfacesReseau->h_length); // On cree une copie depuis buffer
             MesIPs.ip[i] = inet_ntoa(valip.sin_addr); // On les met dans la structure
             MesIPs.nbips = i;
         }
     
         return MesIPs;
    }
    Elle fonctionne très bien en mode console.
    Seulement quand je la met dans mon application utilisant l'API Win32 (ce n'est pas forcement ca qui cause le problème), je n'ai aucune erreur de compilation, mais elle ne me retourne plus rien !

    Je voulais l'utiliser pour remplir une combobox avec mes IP voici le code ci-dessous :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    LRESULT CALLBACK procedureFenetreHebergerPartie(HWND fenetre, UINT message, WPARAM wParam, LPARAM lParam)
    {
        StockageIPs MesIPs;
        int i;
     
        switch (message)
        {
        case WM_CREATE:
     
            RemplirFenetreHebergerPartie(fenetre);
            MesIPs = RecupererMesIPs();
     
            for(i=0;i<MesIPs.nbips;i++)
            {
                  SendDlgItemMessage(fenetre, ID_COMBOBOX_LISTEIPS, CB_ADDSTRING, 0, (LONG)MesIPs.ip[i]);
            }
     
            SendDlgItemMessage(fenetre, ID_COMBOBOX_LISTEIPS, CB_SETCURSEL, 0, 0);
     
     
        case WM_CLOSE:
            ShowWindow(fenetre, SW_HIDE); // Fermer fenetre et non detruire
            return 0;
     
        default:
            return DefWindowProc(fenetre,message,wParam,lParam);
        }
    }
    Alors pour ce que j'ai testé :
    - La combo fonctionne parfaitement avec SendDlgItemMessage(fenetre, ID_COMBOBOX_LISTEIPS, CB_ADDSTRING, 0, (LONG)"Un texte....");
    Mais ne fonctionne pas si je mets le i de ma boucle (meme en initialisant i=0;i<4;i++) à la place de "Un texte ...." => SendDlgItemMessage(fenetre, ID_COMBOBOX_LISTEIPS, CB_ADDSTRING, 0, (LONG)i);
    - Dans ma fonction RecupererMesIPs() puisque je n'avais aucun retour dans ma structure j'ai alors spécifié MesIPs.nbips = 5; arbitrairement avant le return.
    => A ce moment la, ma boucle dans mon CREATE_WINDOW boucle bien 5 fois.

    Je pense donc que c'est bel est bien quelque chose qui ne se FAIT PAS à l'intérieur meme de ma fonction RecupererMesIPs() qui pourtant est un copier coller de celle que j'ai testé en version console...

    Quelqu'un pourrait m'aider à trouver???

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Il y a un return 0 manquant dans le traitement de WM_CREATE mais je suppose que tu l'as dans ton code chez toi. A part ça, poste le code complet pour que l'on puisse tester aussi de notre côté

  3. #3
    Membre régulier Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Points : 86
    Points
    86
    Par défaut
    Problème résolu, j'ai créé un nouveau projet, ajouté fonction par fonction (copier coller) et ca marche très bien...

    Bizarre...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2009, 15h42
  2. Une fonction qui marche 8 fois mais pas 9
    Par Swarley dans le forum Prolog
    Réponses: 1
    Dernier message: 04/12/2008, 10h21
  3. [Surnaturel] Une fonction qui marche en débug, pas en release
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 6
    Dernier message: 04/07/2006, 14h22
  4. Fonction qui marche sous FF mais pas IE
    Par Oluha dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 14h07
  5. Réponses: 3
    Dernier message: 22/07/2005, 15h16

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