以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于外部引用的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=49309)

--  作者:东方青石
--  发布时间:2014/4/15 19:36:00
--  [求助]关于外部引用的问题
我想引用Wininet.dll 中的GetUrlCacheEntryInfo 和oleaut32.dll中的SysAllocString这连个API,请问我该如何操作啊?
--  作者:有点甜
--  发布时间:2014/4/15 20:08:00
--  

 如果你的这两个dll注册了,那直接定义下就能用了

 

 参考 http://www.foxtable.com/help/topics/1937.htm

 


--  作者:东方青石
--  发布时间:2014/4/15 20:55:00
--  
Declare Function GetUrlCacheEntryInfo Lib "wininet.dll" Alias "GetUrlCacheEntryInfoW" (ByVal szUrlName As Long, ByRef lpCacheEntryInfo As object, ByRef lpdwCacheEntryInfoBufferSize As Long) As Long
Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String
Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As object, Source As object, ByVal Length As Long)

Structure   FILETIME 
Dim dwLowDateTime As Long
Dim dwHighDateTime As Long
End Structure   

Structure   INTE_CACHE_ENTRY_INFO
 Dim    dwStructSize As Long
 Dim    lpszSourceUrlName As Long
 Dim    lpszLocalFileName As Long
Dim     CacheEntryType As Long
 Dim    dwUseCount As Long
 Dim    dwHitRate As Long
 Dim    dwSizeLow As Long
 Dim    dwSizeHigh As Long
 Dim    LastModifiedTime As FILETIME
 Dim    ExpireTime As FILETIME
 Dim    LastAccessTime As FILETIME
  Dim   LastSyncTime As FILETIME
  Dim   lpHeaderInfo As Long
 Dim    dwHeaderInfoSize As Long
Dim     lpszFileExtension As Long
 Dim    dwReserved As Long
End Structure   
Public Function GetCachePath(byval lpszUrl As String) As String
    Dim dwEntrySize As Long
    Dim lpCacheEntry As INTE_CACHE_ENTRY_INFO
    Dim tarr() As Byte
 
    Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), ByVal 0, dwEntrySize)
    If dwEntrySize > 0 Then
        ReDim tarr(0 To dwEntrySize)
 
        Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), tarr(0), dwEntrySize)
        dim a
        
        a=CopyMem(ByVal lpCacheEntry, tarr(0), Len(lpCacheEntry))
        GetCachePath = SysAllocString(lpCacheEntry.lpszLocalFileName)
        GetCachePath = StrConv(GetCachePath,128)
    End If
End Function

我改后如上,但编译通不过,大概意思就是StrPtr(lpszUrl)这个了,将lpszurl转换成指针出错。。。有解决办法没有?
[此贴子已经被作者于2014-4-15 20:59:28编辑过]

--  作者:有点甜
--  发布时间:2014/4/15 21:23:00
--  

 试试这样改

 

Public Function GetCachePath(byRef lpszUrl As String) As String
    Dim dwEntrySize As Long
    Dim lpCacheEntry As INTE_CACHE_ENTRY_INFO
    Dim tarr() As Byte
 
    Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), ByVal 0, dwEntrySize)
    If dwEntrySize > 0 Then
        ReDim tarr(0 To dwEntrySize)
 
        Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), tarr(0), dwEntrySize)
        dim a
        
        a=CopyMem(ByVal lpCacheEntry, tarr(0), Len(lpCacheEntry))
        GetCachePath = SysAllocString(lpCacheEntry.lpszLocalFileName)
        GetCachePath = StrConv(GetCachePath,128)
    End If
End Function

 


--  作者:东方青石
--  发布时间:2014/4/15 22:01:00
--  
很久没用VB了,都忘记了转换指针
Public Function GetCachePath(byref lpszUrl As String) As String
Dim lpCacheEntry As INTE_CACHE_ENTRY_INFO
MessageBox.show("正确调用3")
Dim tarr() As Byte
Call GetUrlCacheEntryInfo( lpszUrl,byval 0, dwEntrySize)
MessageBox.show ("第一步:" & dwEntrySize)
If dwEntrySize > 0 Then
    ReDim tarr(0 To dwEntrySize)
    Call GetUrlCacheEntryInfo(lpszUrl, tarr(0), dwEntrySize)
    call CopyMem ( lpCacheEntry, tarr(0), Len(lpCacheEntry))
    GetCachePath = SysAllocString(lpCacheEntry.lpszLocalFileName)
    GetCachePath = StrConv(GetCachePath, 128)
End If
End Function
Call GetUrlCacheEntryInfo( lpszUrl,byval 0, dwEntrySize)出了故障,但运行时不会提示错误。实际该API函数没有返回值,而是一直在运行。导致下面那个提示无法弹出,也无异常。。但是在狐表关闭时win系统会报狐表异常关闭
求大大帮我解决,,我是用来写一个提取验证码的东西。。。做个发票管理的小玩意,结果。。。。。
难道是我上面API函数引入时用的OBJECT类型不对?

--  作者:东方青石
--  发布时间:2014/4/15 22:08:00
--  
白天用看了MSDN的webbrower方法属性什么的,用他的DrawToBitmap方法一直没办法截到图。总是空白一片,心都凉了。
晚上找了下网上的资料有用IE临时文件的方法,试了N久也一直不得门而入

--  作者:有点甜
--  发布时间:2014/4/15 22:13:00
--  

 提取验证码?是什么意思?

 

 是类似网站注册时候生成的那个验证码吗?把这个图片保存下来?


--  作者:东方青石
--  发布时间:2014/4/15 22:17:00
--  
对啊,或者截图下来也成
--  作者:东方青石
--  发布时间:2014/4/15 22:19:00
--  
我想做成联网核对发票真假的一个东西,因为我们经常忘记收发票,我们公司也新规定我们收发票需要验证真伪的。。所以想做个这个东西。。

验证码还是手动输入

目前网页的页面交互除了按钮没做以外,其他都可以了,验证码卡到了
[此贴子已经被作者于2014-4-15 22:22:58编辑过]

--  作者:有点甜
--  发布时间:2014/4/15 22:29:00
--  

 回复9楼,这个简单。

 

 你查找到那个图片的节点,然后你获取它的scr属性,你就得到一个网址,你从这个网址下载图片就行了。

 

 参考 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=48864&skin=0