colesafearraysafearray_inp=variant_inp 出错

colesafearray  时间:2021-07-11  阅读:()

COleSafeArray在串口通信中要怎么使用

#define DIM 1 #define LEN 9 void CTestDlg::OnTest() { BYTE i1vTest[LEN] = ; SAFEARRAYBOUND sab[DIM]; sab[0].cElements = LEN; sab[0].lLbound = 0; SAFEARRAY* psa = NULL; psa = SafeArrayCreate(VT_UI1, DIM, sab); for(long i = 0; i < LEN; i++){ SafeArrayPutElement(psa, &i, &(i1vTest[i])); } VARIANT vt; vt.vt = VT_ARRAY|VT_UI1; vt.parray = psa; COleSafeArray sa; sa = vt; DWORD dwLen = sa.GetOneDimSize(); CString str; str.Format("%d", dwLen); MessageBox(str); } --------------------------------------------------------------------------------- 我写了这样的一个测试程序,感觉问题应该处在你的“第一步”,也就是说,你未必完全正确的从串口缓冲区获得了有效的VARIANT数据。

串口接收数据怎样存储在数组中呢?

Dim Buffer as Variant 表示声明了一个Buffer变量,但是这个Buffer变量的类型不确定,可以是Long、Integer、Double、Object、String以及数组等等,Buffer变量的类型由编译器自行判断与转换。

Dim Buffer(100) as Variant 表示声明了一个数组Buffer,该数组有100个成员,数组的每一个成员都没有指定具体的数据类型,由编译器自行判断与转换 Dim receive(100) as Byte 表示声明了一个数组receive,该数组有100个成员,数组的每一个成员都是Byte型。

Dim Buffer() as Byte 表示声明了一个数组Buffer,该数组成员数目未知,数组的每一个成员都是Byte型。

在确定数组成员数量之前是不能通过Buffer(xx)的这种方式访问Buffer里的成员的。

Dim Buffer() as Byte ....... '接受 ........ Buffer = m.Input 这种方法实际上是把m接收缓存里的所有数据读出来并保存到Buffer数组中,Buffer数组的大小由m接收缓存实际缓存的数据量决定,因为m的接收缓存里实际的数据量是不确定的,所以不能使用 Dim Receive(100) as Byte ....... 接受数据 Receive = m.Input 这样的方式。

Dim Receive(100) as Byte ....... 接受数据 Receive(i) = m.Input 这样是可以的,这样实际上是一次从m的接收缓存里读一个字节的数据,你这样做不行估计是因为数据传输速率和RThreshold设定的问题,因为赋值语句运行的时间要远比串口传输速率快很多倍,所以你必须等m的接收缓存里有100个字节以上的数据时你才能通过循环用m.Input依次读出100个字节的数据,否则就肯定会出错,所以如果你把RThreshold设定为100,也就是每收到100个字节的数据触发一次OnComm事件就可以通过Receive(i) = m.Input把数据读出来。

safearray_inp=variant_inp 出错

safearray_inp.GetElement(&k,rxdata+k); 错在这句,应该是safearray_inp.GetElement(k,rxdata+k); 你参考一下MSDN就知道了 COleSafeArray::GetElement()的说明 Retrieves a single element of the safe array. void GetElement( long* rgIndices, void* pvData ); Parameters rgIndices Pointer to an array of indexes for each dimension of the array. pvData Pointer to the location to place the element of the array. 我正在也用MSCOMM控件做了串口通信的程序。

不过我用的是COleSafeArray::essData()先获得数组数据指针,然后再逐一读出来的。

Boomer.Host(年付3.5美)休斯敦便宜VPS

Boomer.Host是一家比较新的国外主机商,虽然LEB自述 we’re now more than 2 year old,商家提供虚拟主机和VPS,其中VPS主机基于OpenVZ架构,数据中心为美国得克萨斯州休斯敦。目前,商家在LET发了两款特别促销套餐,年付最低3.5美元起,特别提醒:低价低配,且必须年付,请务必自行斟酌确定需求再入手。下面列出几款促销套餐的配置信息。CPU:1core内存:...

buyvm美国大硬盘VPS,1Gbps带宽不限流量

buyvm正式对外开卖第四个数据中心“迈阿密”的块存储服务,和前面拉斯维加斯、纽约、卢森堡一样,依旧是每256G硬盘仅需1.25美元/月,最大支持10T硬盘。配合buyvm自己的VPS,1Gbps带宽、不限流量,在vps上挂载块存储之后就可以用来做数据备份、文件下载、刷BT等一系列工作。官方网站:https://buyvm.net支持信用卡、PayPal、支付宝付款,支付宝付款用的是加元汇率,貌似...

火数云 55元/月BGP限时三折,独立服务器及站群限时8折,新乡、安徽、香港、美国

火数云怎么样?火数云主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、专属服务器托管、带宽租用等产品和服务。火数云提供洛阳、新乡、安徽、香港、美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以及国际顶尖品牌硬件。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松快捷运用云计算!多年云计算领域服务经...

colesafearray为你推荐
settimer如何使用SetTimer MFC 够详细md5值哈希值 散列值 MD5值 都是什么意思啊webcrack我用WebCrack4 在破解路由器密码的时候为什么在破解密码的中途自动关闭掉调度系统操作系统中为什么需要调度?radius认证电信或网通的RADIUS认证都记录些什么?谁能说说ISP的宽带帐号检查流程欢迎页面如何设置电脑的欢迎界面?memsql易语言的msql连接怎么不成功,错哪呢?booth算法用Booth算法计算-4×3的4位补码乘法运算,要求写出每一步运算过程及运算结果 麻烦详细说明每一步的操作qq业务中心QQ业务办理暴力破解密码用什么方法才能破解别人密码
1g虚拟主机 域名服务器是什么 个人域名备案流程 naning9韩国官网 漂亮qq空间 国外php主机 搜狗抢票助手 灵动鬼影 华为网络硬盘 godaddy域名证书 腾讯实名认证中心 服务器是干什么的 电信托管 联通网站 万网空间管理 河南移动梦网 游戏服务器出租 php服务器 服务器论坛 江苏徐州移动 更多