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()先获得数组数据指针,然后再逐一读出来的。

特网云-新上线香港五区补货资源充足限时抢 虚拟主机6折,低至38元!

官方网站:点击访问特网云官网活动方案:===========================香港云限时购==============================支持Linux和Windows操作系统,配置都是可以自选的,非常的灵活,宽带充足新老客户活动期间新购活动款产品都可以享受续费折扣(只限在活动期间购买活动款产品才可享受续费折扣 优惠码:AADE01),购买折扣与续费折扣不叠加,都是在原价...

Hostodo,美国独立日特价优惠,四款特价VPS云服务器7折,KVM虚拟架构,NVMe阵列,1核512M内存1Gbps带宽3T月流量,13.99美元/月,赠送DirectAdmin授权

Hostodo近日发布了美国独立日优惠促销活动,主要推送了四款特价优惠便宜的VPS云服务器产品,基于KVM虚拟架构,NVMe阵列,1Gbps带宽,默认分配一个IPv4+/64 IPv6,采用solusvm管理,赠送收费版DirectAdmin授权,服务有效期内均有效,大致约为7折优惠,独立日活动时间不定,活动机型售罄为止,有需要的朋友可以尝试一下。Hostodo怎么样?Hostodo服务器好不好?...

LOCVPS:美国XEN架构VPS七折,全场八折,日本/新加坡XEN架构月付29.6元起

LOCVPS发来了针对XEN架构VPS的促销方案,其中美国洛杉矶机房7折,其余日本/新加坡/中国香港等机房全部8折,优惠后日本/新加坡机房XEN VPS月付仅29.6元起。这是成立较久的一家国人VPS服务商,目前提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建...

colesafearray为你推荐
appcan怎样做手机软件rbf神经网络rbf神经网络的输入参数个数有上限么settimervc++6.0 settimer函数是怎么用的啊,能给个例子在讲解一下行么weakhashmapMap接口,HashMap和HashTable的相同点和不同点分别是什么?天融信防火墙笔记本怎么登陆天融信防火墙radius认证电信或网通的RADIUS认证都记录些什么?谁能说说ISP的宽带帐号检查流程民生电商民生电商招的仓库操作工是干什么的优众网一淘网是淘宝客吗?有什么区别吗12306注册12306怎么注册账号菜霸现实中遇到地痞流氓该怎么办
jsp虚拟空间 新加坡虚拟主机 北京主机租用 罗马假日广场 便宜服务器 inmotionhosting cpanel主机 10t等于多少g iisphpmysql 服务器怎么绑定域名 搜狗12306抢票助手 cn3 支持外链的相册 双12 万网主机管理 台湾google 谷歌台湾 后门 网站加速 江苏双线 更多