如何避免使用Internet Transfer 控件

ZDNet软件频道 时间:2003-11-14 作者:ZDNet China |  我要评论()
本文关键词:vbtips
在Visual Basic 6中,Internet Transfer Control 作为跟踪程序的bugs的组件而被用户所熟知。同时,发现在程序中使用这个控件的时候,Microsoft Office组建会伴随着程序自动运行,这样就会导致一些错误发生。如何避免这种尴尬呢 ?
本文译自Builder.com,未经许可请勿转载

在Visual Basic 6中,Internet Transfer Control (ITC)作为跟踪程序的bugs的组件而被用户所熟知。但是有时候Internet Transfer 控件中提供的OpenURL方法并不能检索整个页面,同时,程序员发现在程序中使用这个控件的时候,Microsoft Office组建会伴随着程序自动运行,这样就会导致一些错误发生。

如果你需要检索HTML页面,最简单的方法是从WinINet API程序库中调用一些函数来完成。首先,将下面的说明放到你的项目中(一个代码模块),这样,就可以让程序知道需要WinINet程序库中的哪些函数:

Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Public Const INTERNET_OPEN_TYPE_PROXY = 3
Public Const scUserAgent = "VB OpenUrl"
Public Const INTERNET_FLAG_RELOAD = &H80000000


Public Declare Function InternetOpen Lib "wininet.dll" _
  Alias "InternetOpenA" (ByVal sAgent As String, _
  ByVal lAccessType As Long, ByVal sProxyName As String, _

  ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

Public Declare Function InternetOpenUrl Lib "wininet.dll" _
   Alias "InternetOpenUrlA" (ByVal hOpen As Long, _
   ByVal sUrl As String, ByVal sHeaders As String, _
   ByVal lLength As Long, ByVal lFlags As Long, _
   ByVal lContext As Long) As Long

Public Declare Function InternetReadFile Lib "wininet.dll" _
   (ByVal hFile As Long, ByVal sBuffer As String, _
   ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) _
   As Integer

Public Declare Function InternetCloseHandle Lib "wininet.dll" _
        (ByVal hInet As Long) As Integer

    然后,我们可以得到包含了一份详细说明的URL文本文件,它显示在下面的函数中:

      Dim s As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, _
 vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, _
 INTERNET_FLAG_RELOAD, 0)
 bDoLoop = True
 Do While bDoLoop
  ReadBuffer = vbNullString
  Ret = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), _
   lNumberOfBytesRead)
  s = s & Left$(sReadBuffer, lNumberOfBytesRead)
  I f Not CBool(lNumberOfBytesRead) Then bDoLoop = False
  Loop

 f hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
 If hOpen <> 0 Then InternetCloseHandle (hOpen)
 GetHTMLFromUrl = s
 End Function

利用这种方法,我们就可以避免使用ITC并且可以防止由于使用它而产生的错误。



责任编辑:李宁

欢迎评论投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134