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???