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) :
Elle fonctionne très bien en mode console.
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; }
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 :
Alors pour ce que j'ai testé :
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); } }
- 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???
Partager