Subject: code in ares_init

code in ares_init

From: julien thai <julienresiprocate_at_gmail.com>
Date: 2005-05-02

Dear all,
 First, Have a nice week! How are you?
Hope that everybody had a nice weekend.
 Now, i found that in ares_init.c
 From line 366 to 399, code below:

FIXED_INFO * FixedInfo;

ULONG ulOutBufLen;

DWORD dwRetVal;

IP_ADDR_STRING * pIPAddr;

HANDLE hLib;

int num;

DWORD (WINAPI *GetNetworkParams)(FIXED_INFO*, DWORD*);

hLib = LoadLibraryA("iphlpapi.dll");

if(!hLib)

{

return ARES_ENOTIMP;

}

(void*)GetNetworkParams = GetProcAddress(hLib, "GetNetworkParams");

if(!GetNetworkParams)

{

FreeLibrary(hLib);

return ARES_ENOTIMP;

}

//printf("ARES: figuring out DNS servers\n");

FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, sizeof( FIXED_INFO ) );

ulOutBufLen = sizeof( FIXED_INFO );

if( ERROR_BUFFER_OVERFLOW == (*GetNetworkParams)( FixedInfo, &ulOutBufLen )
)

{

GlobalFree( FixedInfo );

FixedInfo = (FIXED_INFO *)GlobalAlloc( GPTR, ulOutBufLen );

}

if ( dwRetVal = (*GetNetworkParams)( FixedInfo, &ulOutBufLen ) )

{

//printf("ARES: couldn't get network params\n");

GlobalFree( FixedInfo );

FreeLibrary(hLib);

return ARES_ENODATA;

}

 I don't understand why author use LoadLibraryA and GetProcAddress only to
load the function GetNetworkParams

Can you explain for me the purpose of author? thank so much. Cos in evc++
4.0 emulator, sometimes it makes the

error access violation.

So i try to use the code like below:

 #ifdef _WIN32_WCE

FIXED_INFO* FixedInfo = new FIXED_INFO;
ULONG* ulOutBufLen= new ULONG;
DWORD iResponse = 0;
*ulOutBufLen = sizeof( FIXED_INFO );

iResponse = GetNetworkParams(FixedInfo,ulOutBufLen);

if (iResponse == ERROR_BUFFER_OVERFLOW)
{
.....

}

etc...

 Julien

_______________________________________________
http://cool.haxx.se/mailman/listinfo/c-ares
Received on Mon May 2 11:13:07 2005