当前位置:编程学习 > VB >>

vb6 中使用GetUrlCacheEntryInfo函数时,总报非法操作窗口!!!请伴

用IE浏览网页,浏览到的网页会缓存起来,如果下次访问同样的页面,速度就快   
    
  很多。   
  例如http://www.heiha.com/etnow/aa.aspx
  会缓存为E:\WinNT\Profiles\zhangzh\Temporary   Internet   Files\aa[1].aspx   
  我的问题是,如果我知道URL,想找到它对应的缓存文件,该怎么做? 
我用了GetUrlCacheEntryInfo函数去获得url对应的缓存文件名
代码如下:
 Private Const ERROR_INSUFFICIENT_BUFFER = 122
  Private Const eeErrorBase = 26720
    
  Private Type FILETIME
       dwLowDateTime   As Long
       dwHighDateTime   As Long
  End Type
    
  Private Type INTERNET_CACHE_ENTRY_INFO
       dwStructSize   As Long
       lpszSourceUrlName   As String
       lpszLocalFileName   As String
       CacheEntryType   As String
       dwUseCount   As Long
       dwHitRate   As Long
       dwSizeLow   As Long
       dwSizeHigh   As Long
       LastModifiedTime   As FILETIME
       ExpireTIme   As FILETIME
       LastAccessTime   As FILETIME
       LastSyncTime   As FILETIME
       lpHeaderInfo   As Long
       dwHeaderInfoSize   As Long
       lpszFileExtension   As String
       dwReserved   As Long
  End Type
    
  Private Declare Function GetUrlCacheEntryInfo Lib "wininet.dll" _
  Alias "GetUrlCacheEntryInfoA" (ByVal sUrlName As String, _
       lpCacheEntryInfo As Any, lpdwCacheEntryInfoBufferSize _
       As Long) As Long
       
Private Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef _
    Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String

    
  '用来报告API产生的错误:
  Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
  Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000
  Private Const FORMAT_MESSAGE_FROM_HMODULE = &H800
  Private Const FORMAT_MESSAGE_FROM_STRING = &H400
  Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
  Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
  Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF
  Private Declare Function FormatMessage Lib "kernel32" Alias _
       "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, _
       ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
       ByVal lpBuffer As String, ByVal nSize As Long, Arguments _
       As Long) As Long
    
  Public Function WinAPIError(ByVal lLastDLLError As Long) As String
  Dim sBuff     As String
  Dim lCount     As Long
    
       '返回与LastDLLError相关的出错信息:
       sBuff = String$(256, 0)
       lCount = FormatMessage( _
        FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, _
        0, lLastDLLError, 0&, sBuff, Len(sBuff), ByVal 0)
       If lCount Then
        WinAPIError = Left$(sBuff, lCount)
       End If
    
  End Function
    
  Public Function GetCacheEntryInfo(ByVal hWnd As Long, _
       ByVal lpszUrl As String) As Boolean
    
  Dim dwEntrySize     As Long
  Dim lpCacheEntry     As INTERNET_CACHE_ENTRY_INFO
  Dim dwTemp     As Long
  Dim lErr     As Long
    
       If (GetUrlCacheEntryInfo(lpszUrl, ByVal 0&, dwEntrySize)) = 0 Then
        lErr = Err.LastDllError
        If (lErr <> ERROR_INSUFFICIENT_BUFFER) Then
             '预料外的错误。须要显示出错原因:
             Err.Raise eeErrorBase + 1, _
              App.EXEName & ".mCacheEntry", WinAPIError(lErr)
    
             GetCacheEntryInfo = False
             Exit Function
        Else
             '这是预料中的错误
             GetCacheEntryInfo = True
             
             Dim tarr() As Byte
             Dim ls_strs As String
             ReDim tarr(0 To dwEntrySize)
             
             Call GetUrlCacheEntryInfo(lpszUrl, tarr(0), dwEntrySize)
             
             MoveMemory lpCacheEntry, tarr(0), Len(lpCacheEntry)
             
             ls_strs = SysAllocString(lpCacheEntry.lpszLocalFileName)
             MsgBox ls_strs
        End If
       End If
    
  End Function

Private Sub Command1_Click()
Dim ls_strs As String
Dim ls_s1 As String
Dim ls_s2 As String
ls_s2 = "http://www.heiha.com/etnow/aa.aspx"


 On Error GoTo ErrorHandler
       '检查Text中的URL地址是否出现在缓存中:
       If (GetCacheEntryInfo(Me.hWnd, ls_s2)) Then
        MsgBox "URL   In   Cache.", vbInformation
       Else
        MsgBox "URL   Not   In   Cache.", vbInformation
       End If
    
  Exit Sub
    
ErrorHandler:
    MsgBox "URL   Not   in   Cache   [" & Err.Description & "]", vbInformation
End Sub

每次执行到MoveMemory这句话就报非法操作窗口!!!! --------------------编程问答-------------------- 求助 --------------------编程问答-------------------- 没遇到过这种情况. --------------------编程问答-------------------- 我也想知道,正在找這方面的資料~~~~~ --------------------编程问答-------------------- 能用CopyMemory么?
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,