Bonjour tlm,
Je programme sous Visual C++ 6. J'ai essayé de faire une petit
application (avec une fenêtre) pour trnasmettre les nom internet (FQDN)
en adresse IP (via le protocole DNS). Pour ca j'ai voulu innover en
utilisant la commande WSAAsyncGetHostByName (qui est la commande
gethostbyname mais en asynchrone). Mon programme lance donc cette
requête (en asynchrone), il envoie la requête (je l'ai vu avec mon
sniffer) mais la procédure MainProc...
Es-ce-que qqun aurait une idée pourquoi ça ne marche pas???
Voici mon code
#pragma comment(lib, "Ws2_32.lib")
#include<winsock2.h>
#include<windows.h>
#include"resource.h"
#define BUF_SIZE 1024
#define WM_SOCKET WM_USER + 203
char* bufAdd;
char* lServer;
bool recherche;
LRESULT CALLBACK MainProc(HWND Dlg, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmnShow)
{
HWND hDlg;
hDlg = CreateDialog(hInstance, (LPCSTR)IDD_DIALOG, NULL, (DLGPROC)MainProc);
ShowWindow(hDlg, SW_SHOW);
SetDlgItemText(hDlg, IDC_EDIT, (LPCSTR)"www.google.com");
recherche = false;
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
MSG msg;
while(GetMessage(&msg, NULL, 0,0)== TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK MainProc(HWND Dlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int Select;
switch(message)
{
case WM_COMMAND:
Select = LOWORD(wParam);
switch(Select)
{
case IDCANCEL:
EndDialog(Dlg, Select);
PostQuitMessage(0);
return TRUE;
case IDC_BUTTON:
{
//Reprend l'adresse donnée dans le buffer
bufAdd = new char[BUF_SIZE];
lServer = new char[MAXGETHOSTSTRUCT];
int sBuffer = GetDlgItemText(Dlg, IDC_EDIT,
(LPTSTR)bufAdd, BUF_SIZE - 1);
//Test si le nb de param tappé est le max
if(sBuffer != 0 && recherche == false)
{
recherche = true;
//Lancement de la recherche
SetDlgItemText(Dlg,
IDC_RECHERCHE, "Recherche en cours...");
memset(lServer, 0,
MAXGETHOSTSTRUCT);
WSAAsyncGetHostByName(Dlg,
WM_SOCKET , bufAdd, lServer, MAXGETHOSTSTRUCT);
int taille = WSAGetLastError();
}else
{
delete [] bufAdd;
}
return TRUE;
}
case WM_SOCKET:
delete [] bufAdd;
SetDlgItemText(Dlg, IDC_RECHERCHE, "Aucune recherche en cours");
delete lServer;
recherche = false;
return FALSE;
}
default:
return FALSE;
}
}
La taupe voit toujours tout (sauf les bugs)