声明internetreadfile

fling_boy 2002-07-04 04:59:32
Public Declare Function InternetReadFile Lib "wininet.dll" ( _
ByVal hFile As Long, _
ByVal sBuffer As String, _
ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer

在VB中可以用上的的方法声明internetreadfile,在读取文本文件时可正常工作,但在读取
非文本文件时因为VB中的内部转换,使读取的数据发生了变化,基本上全变了。
MSDN上说可以声明成下面这样,但要为sBuffer 手工分配一段内存空间,并管理这段空
间,我没有好的方法,不知道怎么办?主要是改传一个什么类型的参数给sBuffer?

Public Declare Function InternetReadFile Lib "wininet.dll" ( _
ByVal hFile As Long, _
ByVal sBuffer As long, _
ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fling_boy 2002-07-07
  • 打赏
  • 举报
回复
找到原因了,声明对但调用时应该是sBuffer(0).
fling_boy 2002-07-04
  • 打赏
  • 举报
回复
我上面写的是MSDN上的,而且我也用过any 类型,也出同样的错误。
空间应该够用,我每次读取1024byte,定义时就固定成了1024了。

Chice_wxg(我怕谁?我是谁!我是流氓我最贼。) :谢谢。
Chice_wxg 2002-07-04
  • 打赏
  • 举报
回复

还有:
dim sBuffer() as byte

redim sBuffer( 空间必须足够大 )

否则肯定非法操作。


Chice_wxg 2002-07-04
  • 打赏
  • 举报
回复
Public Declare Function InternetReadFile Lib "wininet.dll" ( _
ByVal hFile As Long, _
sBuffer As Any, _
ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Long

这样。

PS:API一般都用Long声明,不要用Integer
heruzhi 2002-07-04
  • 打赏
  • 举报
回复
VB好象是通过数组来管理内存得(我也不太清楚,听说得)。
是不是可以把SBUFFER定义为字节数组呢?

仅作参考!
fling_boy 2002-07-04
  • 打赏
  • 举报
回复
sBuffer 应该是一个能存储数据的缓冲区,一个long类型的参数肯定不行。
我试着:dim sBuffer() as string
dim sBuffer() as byte

然后 :internetReadFile(,varptrarray(sBuffer),,)
但都提示该内存只读而出错,直接退出VBide.
ouyangke 2002-07-04
  • 打赏
  • 举报
回复
传一个Long类型的参数给sBuffer
‖天天写程序‖ ‖夜夜泡小妞‖
‖身兼数职做代码‖‖晚晚工作到天明‖
‖为何人生如此苦‖‖泡妞消费数目高‖
‖我看世俗本无趣‖‖程序伤神妞伤人‖
‖不再见女人‖ ‖不想写程序‖

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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