送分100分:MSComm1.Output = SHuZu(i)为什么不能用非要用 MSComm1.Output = SHuZu才可以

qingyicn 2009-12-01 09:29:39
VB6中的问题,但因为涉及到硬件,所以还是到贵宝地来请教一下:

代码如下
dim SHuZu(5) as byte,i as integer
for i =0 to 4
MSComm1.Output = SHuZu(i) '1、这种形式发送数据不成功
next i

MSComm1.Output = SHuZu '2、这种形式发送数据成功

问题如下:
1、MSComm1.Output = SHuZu(i)和 MSComm1.Output = SHuZu有什么区别
2、为什么MSComm1.Output = SHuZu发送成功,而MSComm1.Output = SHuZu(I)发送不成功
3、MSComm1.Output = SHuZu 这种对SHuZu这种调用方式感觉很特殊,可否给详细说明一下。
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一条晚起的虫 2009-12-02
  • 打赏
  • 举报
回复

  dim SHuZu(5) as byte,i as integer
    for i =0 to 4
      MSComm1.Output = SHuZu(i)    '1、这种形式发送数据不成功
    next  i
   
    MSComm1.Output = SHuZu          '2、这种形式发送数据成功

问题如下:
1、MSComm1.Output = SHuZu(i)和 MSComm1.Output = SHuZu有什么区别
// Shuzu[i]是个数组元素,一个byte,SHuzu是数组
2、为什么MSComm1.Output = SHuZu发送成功,而MSComm1.Output = SHuZu(I)发送不成功
//MSCOMM的Output要求是一个数组
3、MSComm1.Output = SHuZu 这种对SHuZu这种调用方式感觉很特殊,可否给详细说明一下。
//调用数组名,就等于调用数组

//dim shuzu as string*5这样可以
尘雨 2009-12-02
  • 打赏
  • 举报
回复
SHuZu(i) ,这是一个字节型的变量,
MSComm1.Output = SHuZu(i)

这一句会导致字节型的变量自动转换为VARIANT,这个转换把字节型转换成了long型的variant类型

通常vb里,字符数组和字节数组可以等同对待。因为一个ASC字符占据一个字节,对于整个数组来说,转换成variant,就是字节流。

MSComm1.Output = 字节数组名称 而不能是 字节数组元素

如果是字符数组,
DIM SHUZU(5) AS CHAR
SHUZU(i)的含义就是一个单字符,对于variant,一个英文单字符是一个字节。
MSComm1.Output = SHUZU(i) 应该是正确的。因为这是一个字符元素。转换成variant也是代表一个字节的字节流。

大致就是这样。
qingyicn 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vieri_ch 的回复:]
MSComm1.Output 这个属性是要求varaint类型

MSComm1.Output = “1”,可以被自动转为varaint
MSComm1.Output =1 1虽然是byte类型,但是不会当做varaint类型,而是转换成varaint.lval,(long)型的,这就是不是一个字节了,所以会出错
MSComm1.Output 是要求字节流,或者字符数组。不能是多字节的长整形
[/Quote]

问题如下:
1、dim SHuZu(5) as byte,我定义的是这个呀,我传递的是MSComm1.Output = SHuZu(i),是SHuZu(i),非i。
2、MSComm1.Output 是要求字节流,或者字符数组。不能是多字节的长整形。 我传递的就是字节数组。你所说的字符数组是如何定义的呢,是DIM SHUZU(5) AS CHAR ,还是dim shuzu as string*5.
qingyicn 2009-12-02
  • 打赏
  • 举报
回复
根据大家以上的探讨,得出的结论如下:

MSComm1.Output = SHuZu 传送的应该是地址。

所以我们下面的问题就应该是:

VB6中有没有直接取地址的命令,可以取出变量shuzu(i)的地址,使MSCOMM1=取地址函数(shuzu(i))也可以使用。
尘雨 2009-12-01
  • 打赏
  • 举报
回复
MSComm1.Output 这个属性是要求varaint类型

MSComm1.Output = “1”,可以被自动转为varaint
MSComm1.Output =1 1虽然是byte类型,但是不会当做varaint类型,而是转换成varaint.lval,(long)型的,这就是不是一个字节了,所以会出错
MSComm1.Output 是要求字节流,或者字符数组。不能是多字节的长整形
la_feng 2009-12-01
  • 打赏
  • 举报
回复
delphi的啊?
xiaocai 2009-12-01
  • 打赏
  • 举报
回复
up

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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