wininet.dll为什么电脑可用手机不可用

thestronger 2010-01-07 10:41:26
我用wininet.dll做了个小程序,练习它的用法,是用于手机的。
但是编译出来的程序在电脑上用没问题,在电脑上用手机模拟器以及在手机上运行都会报错。我调试时发现是InternetOpenUrl返回了0。我想请教一下怎么会这样呢?

以下是用它做的类模块:
Public Class inet
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const scUserAgent = "Microsoft Internet Explorer 6.0"
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As IntPtr
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As IntPtr, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Integer, ByVal lFlags As Integer, ByVal lContext As Integer) As IntPtr
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Integer) As Integer
<DllImport("wininet.dll", EntryPoint:="InternetReadFile")> _
Private Shared Function InternetReadFile(ByVal hFile As IntPtr, _
<OutAttribute(), MarshalAs(UnmanagedType.LPStr)> ByVal sBuffer As StringBuilder, ByVal lNumBytesToRead As Integer, ByRef lNumberOfBytesRead As Integer) As Boolean
End Function

Public Function GetUrlStr(ByVal URL As String) As String '调用时 URL 参数一定要带 http:// 前缀.
Dim hOpen As IntPtr
Dim hOpenUrl As IntPtr
Dim sUrl As String
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim lNumberOfBytesRead As Integer
Dim sBuffer As String = ""
sUrl = URL
Dim sb As New StringBuilder()
sb.Append(" ", 2048)
Dim sreadbuffer As String = sb.ToString
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, Nothing, Nothing, 0)
'MsgBox(hOpen.ToString)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, Nothing, 0, INTERNET_FLAG_RELOAD, 0)
'MsgBox(hOpenUrl.ToString)
bDoLoop = True
While bDoLoop
bRet = InternetReadFile(hOpenUrl, sb, 2048, lNumberOfBytesRead)
sBuffer = sBuffer & sb.ToString
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
End While
GetUrlStr = sBuffer
If hOpenUrl <> 0 Then InternetCloseHandle(hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle(hOpen)
End Function
End Class
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
thestronger 2010-01-09
  • 打赏
  • 举报
回复
今天找到了使用GetLastError的方法,要引用Coredll.dll。
我把它放在InternetOpenUrl后面,返回的信息第一次是6,后面每次都是12006,意思是 ERROR_INTERNET_UNRECOGNIZED_SCHEME The URL scheme could not be recognized or is not supported.
可是我的网址是:"http://www.baidu.com",怎么会有问题呢?
可怜的我啊!!
世外涛缘 2010-01-08
  • 打赏
  • 举报
回复
请楼主先确认下,使用的dll是PC版本的,还是WM版本的,应该不是一个dll。
InternetOpenUrl返回0说明连接失败了,调用GetLastError获取一下错误信息。
thestronger 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wang_junjie 的回复:]
wininet 在 PPC 上绝对可以用,注意 InternetReadFile 取的是 char,需要做转换
[/Quote]
不错,我把InternetReadFile中用的stringbuilder改为char数组。就不报错了。
但是InternetOpenUrl仍然返回0。
另外,手机无法调用GetLastError获取一下错误信息,不支持kernel32
北方大冬瓜 2010-01-08
  • 打赏
  • 举报
回复
wininet 在 PPC 上绝对可以用,注意 InternetReadFile 取的是 char,需要做转换
thestronger 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiangyongtao 的回复:]
请楼主先确认下,使用的dll是PC版本的,还是WM版本的,应该不是一个dll。
InternetOpenUrl返回0说明连接失败了,调用GetLastError获取一下错误信息。
[/Quote]

这个dll文件在手机和电脑上都有,我搜索过,它就在手机上的windows文件夹下面。
其实InternetOpenUrl返回0,并没有报错。报错的是internetreadfile。说是不支持的异常。
但是我知道有人在手机上用过这个,不存在不支持的情况。

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧