使用VB开发CGI程序怎么提交二进制文件呢?

cooler 2000-03-24 02:23:00
我使用的是WINDOWS的API函数:
Declare Function GetStdHandle Lib "kernel32" _
(ByVal nStdHandle As Long) As Long
Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, _
ByVal lpBuffer As String, _
ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, _
lpOverlapped As Any) As Long
然后封装为自己的SEND函数:
Sub Send(s As String)
Dim rc As Long
Dim lBytesWritten As Long
rc = WriteFile(hStdOut, s, Len(s), lBytesWritten, ByVal 0&)
End Sub
这对我发送字符串没什么问题,但发送二进制数据就不知道怎么传送参数了,请问我应该怎样传递二进制数据(如整型)给writefile呢?


...全文
134 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cooler 2000-03-30
  • 打赏
  • 举报
回复
我使用了上面的说法,但实际上行不通,比如
Dim bs() as Byte
bs = "sdfsdfsdfsdf"
的结果是:
bs=s,0,d,0,f,0...所以没有办法发送MIME信息给服务器.
我后来写了一个专门的字符串到BYTE数组的转换函数,但服务方接受的信息还是不对头.
后来我依旧使用原来的DECLARE,既:
Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, _
ByVal lpBuffer As String, _
ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, _
lpOverlapped As Any) As Long
Sub Send(s As String)
Dim rc As Long
Dim lBytesWritten As Long
rc = WriteFile(hStdOut, s, Len(s), lBytesWritten, ByVal 0&)
End Sub

只在调用函数时使用:
dim bs() as byte
bs()=...
send bs
浏览器接受到的还是不正确的东西.
而如果我打开本地文件,写本地文件则没有问题.时间急迫,所以我一时心急,又换用
location: http://somehost/somedir/somdocument
了.很感谢大虾的支持,谢谢.
此外如果有空我 回继续研究 ,通过后会把源码公布.











sunsetyang 2000-03-25
  • 打赏
  • 举报
回复
保险一点,你还是在send里面包含一个标明当前缓冲区有效长度的参数吧!!如果发送的数据是byte型的,它的长度就等于有多少个单位,而其他类型的数据要计算一下;如要发送n个整型数据时,发送长度为4n.具体计算为size*sizeof(datatype).这样的处理灵活一些。很多时候,并不是缓冲区多大就有多少数据的。
Sub Send(s() As Byte,Len as Long)
Dim rc As Long
Dim lBytesWritten As Long
rc = WriteFile(hStdOut, s,Len,lBytesWritten, ByVal 0&)
End Sub
hx 2000-03-24
  • 打赏
  • 举报
回复
我也要一份,谢谢。
Un1 2000-03-24
  • 打赏
  • 举报
回复
把函数重新声明:

Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, _
lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, _
lpOverlapped As Any) As Long

把函数重新修改:
Sub Send(s() As Byte)
Dim rc As Long
Dim lBytesWritten As Long

Dim l As Long
l = Lbound(s)

rc = WriteFile(hStdOut, s(l), Ubound(s) - l + 1, lBytesWritten, ByVal 0&)
End Sub

因为任何类型都可以转换为Byte数组,所以肯定行,比如发送字符串:

Dim bs() as Byte
bs = "sdfsdfsdfsdf"

Send bs

7,762

社区成员

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

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