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
...全文
160 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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。说是不支持的异常。
但是我知道有人在手机上用过这个,不存在不支持的情况。
RAD Studio 10.2 Toyko Update2 10.2.2 KEYGEN 一键激活,安装时选择试用,安装完毕后一键激活即可。亲测可用!! Win10 Build 16299 旗舰版 亲测可用!!! 为了便于在 Lite 14.x 中使用大侠们的特别补丁,初步写成这个:Activator.exe 他的主要作用: 1、整合 elseif、unis、x-force、cjack 大虾的 Keygen 相对原始部署方式,这个 Activator 实现“一键激活”! 使用方法: 1、执行 Activator.exe 发布历史: 2017.12.14 - v14.2 1、根据 25.0.28979.1978 原版制作,基于 RadStudioKeygenSourceCodeTokyo10.2Update2CorrectedSetup.zip 的成果 2017.08.11 - v14.1 1、根据 25.0.27659.1188 原版制作,基于 elseif-Rad-Studio-Keygen-master upto 10.2.1 的成果 2017.03.26 - v14.0 1、根据 25.0.26309.314 原版制作,基于 elseif、unis、x-force、cjack 等大虾的成果 已知问题: 1、在一些操作系统上如果出现安全提示,直接确定即可。 特别感谢: 1、elseif、unis、x-force、cjack、crackerjack、dr、freecat、gateway、huayan889、kerlingen、sinner、yuto 等大侠的特别补丁,感谢诸位我知道的不知道的的大虾们的辛勤劳动! 2、iny、nevergrief、snakejiao、star5、tintin1943、ti9er、wang_80919、wuxiangyang 等等我知道的不知道的的网友们的热情测试! 3、andreas hausladen 等大虾们的无私贡献! O(∩_∩)O~ Delphi 10.2 and C++Builder 10.2 Updata2 亲测可用! Embarcadero® C++Builder 10.2 Version 25.0.28979.1978 Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved. advapi32.dll, 10.0.16299.15, C:\WINDOWS\System32\ AEPIC.dll, 10.0.16299.15, C:\WINDOWS\SYSTEM32\ androiddebugide250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ appanalytics250.bpl, 25.0.28979.1978, D:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ apphelp.dll, 10.0.16299.98, C:\WINDOWS\SYSTEM32\ applet250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\bin\ asmview250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ ATL.DLL, 3.5.2284.0, C:\Windows\System32\ bcbandroid250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbcoment250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbcompro250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbent250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbfmxide250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\s
此示例演示在 Internet Explorer 4.0 WinInet.dll 中引入并记录在 Internet 客户端 SDK 中的 HttpSendRequestEx 函数的正确用法。 原始的 HttpSendRequest 函数有这样一个重大限制: 所有请求的数据都有一个缓冲区时调用该函数时将提供。这是通常不方便、 导致在某些客户端应用程序中,性能较差,可能会无法上载大量数据从客户端计算机使用有限的内存。新的 HttpSendRequestEx 函数允许启动请求,发送出数据分小段为可用,然后结束后已发送的所有数据的请求的程序。为了使此函数以处理计算机上必须安装 Internet Explorer 4.0。下列文件已可从 Microsoft 下载中心下载: Hsrex.exe 有关如何下载 Microsoft 支持文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 119591 如何从在线服务获得 Microsoft 支持文件微软已对此文件进行病毒扫描。Microsoft 使用该文件投递日期时可用的最新的病毒检测软件。该文件存储在安全增强型服务器上,以防止对文件进行任何未经授权的更改。 Hsrex.exe 是自解压的存档文件,其中包含 BigPost.cpp (演示程序代码) 和 Readall.asp,一个 Active Server Pages (ASP) 脚本将读取所有发送 POST 请求中的数据。Readall.asp 是 BigPost,可以使用 Microsoft 互联网信息服务器 (IIS) 版本的支持 ASP 作为示例目标提供。对于其他 Web 服务器,您需要提供相应的服务器脚本来读取数据。 若要编译此程序包含在 Microsoft Visual C++ 5.0,请执行以下步骤: 1.运行 Visual C++ 和创建一个新的 Win32 控制台应用程序调用"BigPost"。 2.在目录中创建项目的位置,运行 Hsrex.exe。 3.将 BigPost.cpp 添加到 BigPost 项目。 4.转到项目设置对话框中,单击链接选项卡,然后添加到 WinInet.lib"对象/库模块:"字段。 5.请确保配置 Visual C++,以便编译器和链接器将使用 Wininet.h 和 Wininet.lib 从 Internet 客户端 SDK。如果未能做到这一点,将导致编译器或链接器错误。原型和 HttpSendRequestEx 的导出不包含 Visual C++ 中包含的包括和库文件。 6.生成项目。它将创建 BigPost.exe。 在程序运行,如下所示: BigPost < 大小 >< 服务器 >< 路径 > 例如,以下将开机自检 1 兆字节 (1024 KB) 到 http://yourserver/scripts/ReadAll.asp: 您的服务器 /scripts/ReadAll.asp BigPost 1024

7,660

社区成员

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

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