3,245
社区成员
发帖
与我相关
我的任务
分享
HRESULT STDMETHODCALLTYPE Start(
/* [in] */ LPCWSTR szUrl,
/* [in] */ IInternetProtocolSink __RPC_FAR *pOIProtSink,
/* [in] */ IInternetBindInfo __RPC_FAR *pOIBindInfo,
/* [in] */ DWORD grfPI,
/* [in] */ DWORD dwReserved)
{
USES_CONVERSION;
const char * AgentName = "test";
const char * Url = W2CA (szUrl);
m_pProtocolSink = pOIProtSink;
m_pBindInfo = pOIBindInfo;
m_hInternetSession = InternetOpen (AgentName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC);
if (!m_hInternetSession)
{
ATLTRACE(_T("InternetOpen () failed\n"));
return S_FALSE;
}
else
ATLTRACE(_T("InternetOpen () succeeded, handle is 0x%lX\n"), m_hInternetSession);
InternetSetStatusCallback (m_hInternetSession, StatusCallback);
InternetOpenUrl(m_hInternetSession, Url, NULL, 0, INTERNET_FLAG_RELOAD, (DWORD) this);
return S_OK;
}
HRESULT STDMETHODCALLTYPE Read(
/* [length_is][size_is][out][in] */ void __RPC_FAR *pv,
/* [in] */ ULONG cb,
/* [out] */ ULONG __RPC_FAR *pcbRead)
{
BOOL Status = InternetReadFile (m_hHttpSession, pv, cb, pcbRead);
ATLTRACE(_T("nBuffer is %ld\n"), *pcbRead);
if (Status == FALSE)
{
DWORD error = GetLastError();
ATLTRACE(_T("Errno = %d\n"), error);
return INET_E_DOWNLOAD_FAILURE;
}
else
if (*pcbRead == cb)
{
return S_OK;
}
return S_FALSE;
}