📄 152.htm
字号:
<p></p>
<p> Dim IID_Unk As UUID</p>
<p></p>
<p> m_bSync = True</p>
<p></p>
<p> 注释: Create a asynchronous bind context</p>
<p> Set m_oBC = CreateAsyncBindCtx(0, Me, Nothing)</p>
<p></p>
<p> 注释: Create a URL moniker</p>
<p> Set m_oMk = CreateURLMoniker(Nothing, URL)</p>
<p></p>
<p> 注释: Initialize the IID for Iunknown</p>
<p> IID_Unk.Data4(0) = &HC0</p>
<p> IID_Unk.Data4(7) = &H46</p>
<p></p>
<p> 注释: Start the download to</p>
<p> 注释: get the object</p>
<p> m_oMk.BindToObject m_oBC, Nothing, IID_Unk, Nothing</p>
<p></p>
<p> End Select</p>
<p></p>
<p>End Function</p>
<p></p>
<p>注释:</p>
<p>注释: pvPtr2Str</p>
<p>注释:</p>
<p>注释: Returns a string from a pointer</p>
<p>注释:</p>
<p>Private Function pvPtr2Str(ByVal Ptr As Long) As String</p>
<p></p>
<p> pvPtr2Str = Space$(lstrlenW(Ptr))</p>
<p> MoveMemory ByVal StrPtr(pvPtr2Str), ByVal Ptr, LenB(pvPtr2Str)</p>
<p></p>
<p>End Function</p>
<p></p>
<p>注释:</p>
<p>注释: pvStreamFromPtr</p>
<p>注释:</p>
<p>注释: Returns a Istream reference from a pointer</p>
<p>注释:</p>
<p>Private Function pvStreamFromPtr(ByVal Ptr As Long) As Istream</p>
<p>Dim oStrm As Istream</p>
<p></p>
<p> MoveMemory oStrm, Ptr, 4&</p>
<p></p>
<p> Set pvStreamFromPtr = oStrm</p>
<p></p>
<p> MoveMemory oStrm, 0&, 4&</p>
<p></p>
<p>End Function</p>
<p></p>
<p>Private Sub Class_Initialize()</p>
<p></p>
<p> 注释: Initialize the flags</p>
<p> Flags = adlAsynchronous Or adlGetNewest Or adlResync</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub Class_Terminate()</p>
<p></p>
<p> 注释: Reset the UA</p>
<p> UrlMkSetSessionOption URLMON_OPTION_USERAGENT_REFRESH, ByVal 0&, 0, 0</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub Iauthenticate_Authenticate( _</p>
<p> phwnd As Long, _</p>
<p> pszUsername As Long, _</p>
<p> pszPassword As Long)</p>
<p></p>
<p>Dim sUser As String</p>
<p>Dim sPassword As String</p>
<p></p>
<p> 注释: Raise the event</p>
<p> RaiseEvent Authenticate(sUser, sPassword)</p>
<p></p>
<p> 注释: Allocate memory</p>
<p> pszUsername = pvStr2Ptr(sUser)</p>
<p> pszPassword = pvStr2Ptr(sPassword)</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IBindStatusCallback_GetBindInfo( _</p>
<p> grfBINDF As olelib.BINDF, _</p>
<p> pbindinfo As olelib.BINDINFO)</p>
<p></p>
<p>Dim lPtr As Long</p>
<p></p>
<p> 注释: Set the flags</p>
<p> grfBINDF = Flags And Not (-BINDF_ASYNCHRONOUS * m_bSync)</p>
<p></p>
<p> With pbindinfo</p>
<p></p>
<p> 注释: Set the verb</p>
<p> .dwBindVerb = BINDVERB_CUSTOM</p>
<p> .szCustomVerb = pvStr2Ptr(m_sMethod)</p>
<p></p>
<p> If Len(m_sPostData) > 0 Then</p>
<p></p>
<p> 注释: Set the data length</p>
<p> .cbstgmedData = LenB(m_sPostData)</p>
<p></p>
<p> 注释: Set the data type</p>
<p> .stgmedData.TYMED = TYMED_HGLOBAL</p>
<p></p>
<p> 注释: Allocate global memory for the data</p>
<p> .stgmedData.Data = GlobalAlloc(GHND, LenB(m_sPostData))</p>
<p></p>
<p> 注释: Get a pointer to the data</p>
<p> lPtr = GlobalLock(.stgmedData.Data)</p>
<p></p>
<p> 注释: Copy the data to global memory</p>
<p> MoveMemory ByVal lPtr, ByVal StrPtr(m_sPostData), LenB(m_sPostData)</p>
<p></p>
<p> 注释: Release the pointer</p>
<p> GlobalUnlock .stgmedData.Data</p>
<p></p>
<p> End If</p>
<p></p>
<p> End With</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Function IBindStatusCallback_GetPriority() As Long</p>
<p></p>
<p>End Function</p>
<p></p>
<p>Private Sub IBindStatusCallback_OnDataAvailable( _</p>
<p> ByVal grfBSCF As olelib.BSCF, _</p>
<p> ByVal dwSize As Long, _</p>
<p> pformatetc As olelib.FORMATETC, _</p>
<p> pstgmed As olelib.STGMEDIUM)</p>
<p></p>
<p>Dim oStream As olelib.Istream</p>
<p>Dim tSTATSTG As olelib.STATSTG</p>
<p>Dim abData() As Byte</p>
<p>Dim lUbound As Long</p>
<p></p>
<p> 注释: Get the stream object</p>
<p> Set oStream = pvStreamFromPtr(pstgmed.Data)</p>
<p></p>
<p> 注释: Get the stream info</p>
<p> oStream.Stat tSTATSTG, STATFLAG_NONAME</p>
<p></p>
<p> If tSTATSTG.cbSize > 0 Then</p>
<p></p>
<p> 注释: Allocate the array</p>
<p> ReDim abData(1 To tSTATSTG.cbSize * 10000)</p>
<p></p>
<p> 注释: Read the data</p>
<p> oStream.Read abData(1), tSTATSTG.cbSize * 10000</p>
<p></p>
<p> If m_bFirstTime Then</p>
<p></p>
<p> ReDim m_abData(1 To tSTATSTG.cbSize * 10000)</p>
<p></p>
<p> m_bFirstTime = False</p>
<p></p>
<p> Else</p>
<p></p>
<p> 注释: Get the upper bound</p>
<p> lUbound = Ubound(m_abData)</p>
<p></p>
<p> 注释: Allocate the array</p>
<p> ReDim Preserve m_abData(1 To lUbound + tSTATSTG.cbSize * 10000)</p>
<p></p>
<p> End If</p>
<p></p>
<p> 注释: Copy the data to the array</p>
<p> MoveMemory m_abData(lUbound + 1), abData(1), tSTATSTG.cbSize * 10000</p>
<p></p>
<p> RaiseEvent DataAvailable(abData)</p>
<p></p>
<p> End If</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IBindStatusCallback_OnLowResource( _</p>
<p> ByVal reserved As Long)</p>
<p> 注释: Not used</p>
<p>End Sub</p>
<p></p>
<p>Private Sub IBindStatusCallback_OnObjectAvailable( _</p>
<p> riid As olelib.UUID, _</p>
<p> ByVal punk As stdole.Iunknown)</p>
<p></p>
<p> 注释: Send the object</p>
<p> RaiseEvent ObjectAvailable(punk)</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IBindStatusCallback_OnProgress( _</p>
<p> ByVal ulProgress As Long, _</p>
<p> ByVal ulProgressMax As Long, _</p>
<p> ByVal ulStatusCode As olelib.BINDSTATUS, _</p>
<p> ByVal szStatusText As Long)</p>
<p></p>
<p>Dim lPercent As Long</p>
<p></p>
<p> If ulProgressMax <> 0 Then</p>
<p> lPercent = ulProgress * 100 / ulProgressMax</p>
<p> End If</p>
<p></p>
<p> RaiseEvent Progress(lPercent, ulStatusCode, pvPtr2Str(szStatusText))</p>
<p></p>
<p> DoEvents</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IBindStatusCallback_OnStartBinding( _</p>
<p> ByVal dwReserved As Long, _</p>
<p> ByVal pib As olelib.Ibinding)</p>
<p></p>
<p> 注释: Save the Ibinding reference</p>
<p> Set m_oBinding = pib</p>
<p></p>
<p> RaiseEvent StartingDownload</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IBindStatusCallback_OnStopBinding( _</p>
<p> ByVal hresult As Long, ByVal szError As Long)</p>
<p></p>
<p> RaiseEvent DownloadComplete(hresult)</p>
<p></p>
<p> 注释: Release the Ibinding reference</p>
<p> Set m_oBinding = Nothing</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IHttpNegotiate_BeginningTransaction( _</p>
<p> ByVal szURL As Long, _</p>
<p> ByVal szHeaders As Long, _</p>
<p> ByVal dwReserved As Long, _</p>
<p> pszAdditionalHeaders As Long)</p>
<p></p>
<p> 注释: Allocate memory for the</p>
<p> 注释: additional headers</p>
<p> pszAdditionalHeaders = pvStr2Ptr(m_sHeaders)</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub IHttpNegotiate_OnResponse( _</p>
<p> ByVal dwResponseCode As Long, _</p>
<p> ByVal szResponseHeaders As Long, _</p>
<p> ByVal szRequestHeaders As Long, _</p>
<p> pszAdditionalRequestHeaders As Long)</p>
<p></p>
<p> 注释: Raise the event</p>
<p> RaiseEvent HTTPResponse(dwResponseCode, pvPtr2Str(szResponseHeaders))</p>
<p></p>
<p>End Sub </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -