Положим, callback-функция имеет прототип:
Код: Выделить всё
void CALLBACK InternetStatusCallback(
HINTERNET hInternet,
DWORD_PTR dwContext,
DWORD dwInternetStatus,
LPVOID lpvStatusInformation,
DWORD dwStatusInformationLength
);
Например, если dwInternetStatus == INTERNET_STATUS_REQUEST_SENT, то lpvStatusInformation представляет адрес DWORD bytesOut.
Для этого частного случая не составит труда определить и имплементировать делегат:
Код: Выделить всё
public delegate void InternetCallBack ( IntPtr hInternet,
int context,
int dwInternetStatus,
ref int lpvStatusInformation,
int dwStatusInformationLength );
Код: Выделить всё
public static void m_iCallBack ( IntPtr hInternet,
int context,
int dwInternetStatus,
ref int lpvStatusInformation,
int dwStatusInformationLength )
{
if ( INTERNET_STATUS_REQUEST_SENT == dwInternetStatus )
{
m_BytesOut += lpvStatusInformation;
<skip>
bla-bla-bla
}
}
Код: Выделить всё
typedef struct {
DWORD dwResult;
DWORD dwError;
} INTERNET_ASYNC_RESULT,
* LPINTERNET_ASYNC_RESULT;
Спасибо.