Variant类型变量

690cj 2006-01-07 03:37:24
VB中有 Variant类型变量,声明为Variant类型的数组后,可以通过计算机串口接收二进制数据,请问在PB中有类似的Variant类型的变量吗?有人用PB通过串口接收过二进制数据吗?如果有最好,能提供源码。
...全文
150 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rightyeah 2006-01-09
  • 打赏
  • 举报
回复
觉得leio((郁闷中...)) 的答案很详细了

------------------玄之又玄,众妙之门
robert126 2006-01-08
  • 打赏
  • 举报
回复
没有用过,学习...................
顺便签到..
hygougou 2006-01-08
  • 打赏
  • 举报
回复
oncomm事件:


BLOB lb_data
STRING ls_dipstr
LONG ll_datalens
INTEGER i



choose case object.commevent
case 380
messagebox('','无效属性值 comInvalidPropertyValue')
case 383
messagebox('','属性为只读 comSetNotSupported')
case 394
messagebox('','属性为只读 comGetNotSupported ')
case 8000
messagebox('','端口打开时操作不合法 comPortOpen')
case 8001
messagebox('','超时值必须大于 0 ')
case 8002
messagebox('','无效端口号 comPortInvalid')
case 8003
messagebox('','属性只在运行时有效 ')
case 8004
messagebox('','属性在运行时为只读 ')
case 8005
messagebox('','端口已经打开 comPortAlreadyOpen')
case 8006
messagebox('','设备标识符无效或不支持该标识符 ')
case 8007
messagebox('','不支持设备的波特率 ')
case 8008
messagebox('','指定的字节大小无效 ')
case 8009
messagebox('','缺省参数错误 ')
case 8010
messagebox('','硬件不可用(被其它设备锁定) ')
case 8011
messagebox('','函数不能分配队列 ')
case 8012
messagebox('','设备没有打开 comNoOpen ')
case 8013
messagebox('','设备已经打开 ')
case 8014
messagebox('','不能使用 comm 通知 ')
case 8015
messagebox('','不能设置 comm 状态 comSetCommStateFailed')
case 8016
messagebox('','不能设置 comm 事件屏蔽 ')
case 8018
messagebox('','仅当端口打开时操作才有效 comPortNotOpen ')
case 8019
messagebox('','设备忙 ')
case 8020
messagebox('','读 comm 设备错误 comReadError')
case 8021
messagebox('','为该端口检索设备控制块时的内部错误 comDCBError ')
case 1
messagebox('','发送事件。 ')
case 2

ole_1.object.RThreshold = 0
IF ole_1.object.InBufferCount <> 0 THEN
          //二进制数据
lb_data = ole_1.object.input
FOR i = 1 To Len(lb_data)
ls_dipstr = String(BlobMid(lb_data, i, 1))
            //按位转换成ASCII后转换成16进制,f_inttohex--10进制转16进制
mle_js.text += f_inttohex(ASC(ls_dipstr)) + ":"
NEXT

END IF

case 3
messagebox('','clear-to-send 线变化。 ')
case 4
messagebox('','data-set ready 线变化。 ')
case 5
messagebox('','carrier detect 线变化。 ')
case 6
messagebox('','振铃检测。 ')
case 7
messagebox('','文件结束。 ')

end choose
leio 2006-01-08
  • 打赏
  • 举报
回复
用blob类型接收,接收前先给BLOB分配足够的长度。比如你定义时这样:blob{255} myblob,这样就预分配了255个字节给myblob。
接收后不能直接转换成string类型(直接转换,除非你明确知道数据包里是什么,否则肯定有问题)。
我一般是先测量BLOB长度,然后动态设置一个char[]分配好空间,然后用API函数的memcopy将blob拷贝到char[]中,再进行相应处理(这样比BLOB好处理一些)。

需要注意:
PB以"\0"做为结束符,假设接收的BLOB有20字节,在第10字节是"\0",直接转换成string后就只有9字节(第10及以后的字节全没了)。
转成char[]后,该数组是20的长度,但若直接将该数组转成string,也是9字节。
690cj 2006-01-08
  • 打赏
  • 举报
回复
我试过char、char[]、any、any[]、blob,只有blob程序能通过,但上来的是乱码比如“?”或“$”之类的东西,实在没有办法。在网上也查了很多,但找不到可以用的。

1,108

社区成员

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

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