当前位置:编程学习 > C#/ASP.NET >>

串口通信的byte与BSTR转换等问题

先把程序代码拷上来
...
        BYTE strCom[5];
strCom[0]=241;
for(int i=0;i<4;i++)
{strCom[i+1]=da[i];}

// 利用COM端口发送
// va变量是用来往串口发送数据用的
VARIANT va;
:: VariantInit(&va); // 初始化
va.vt = VT_BSTR; // 指明char*数据类型
BSTR str=::SysAllocStringByteLen(NULL,5);
memcpy(&str,strCom,5);
va.pbstrVal =&str; 
m_comm1.put_Output(va);//发送
...
我程序是要把5个字节的unsighed char通过COM口发送出去,使用了MSCOMM 这个ACTIVEX控件,麻烦在于接收端(用VB编的)给我规定了必须是BYTE的五个字节,网上查了一下,采用memcpy的方式,将数据拷贝进去,然后通过mscomm发出去,调试时出现runtime error,如下:
Run-Time Check Failure #2 - Stack around the variable str was corrupted
我以为是没有释放内存引起的,加上
::SysFreeString(str);
以后呢又出现访问冲突,
这是怎么回事,求高手指点! 串口通信 内存 数据 --------------------编程问答-------------------- 错误的地方:memcpy(&str,strCom,5);

// 利用COM端口发送
// va变量是用来往串口发送数据用的
VARIANT va;
:: VariantInit(&va); // 初始化
va.vt = VT_BSTR; // 指明char*数据类型
BSTR str=::SysAllocStringByteLen(NULL,5);
memcpy(str,strCom,5); //memcpy(&str,strCom,5); str代表的才是SysAllocStringByteLen分配出来的地址
va.pbstrVal =&str; // 不是这样的么 va.bstrVal = str; ?这个不确定,得具体看m_comm1.put_Output(va)里面是怎么用的
m_comm1.put_Output(va);//发送
...
--------------------编程问答--------------------
引用 1 楼 lixeb 的回复:
错误的地方:memcpy(&str,strCom,5);

// 利用COM端口发送
// va变量是用来往串口发送数据用的
VARIANT va;
:: VariantInit(&va); // 初始化
va.vt = VT_BSTR; // 指明char*数据类型
BSTR str=::SysAllocStringByteLen(NULL,5);
memcpy(str,strCom,5); //memcpy(&str,strCom,5); str代表的才是SysAllocStringByteLen分配出来的地址
va.pbstrVal =&str; // 不是这样的么 va.bstrVal = str; ?这个不确定,得具体看m_comm1.put_Output(va)里面是怎么用的
m_comm1.put_Output(va);//发送
...

补充

//因为
va.vt = VT_BSTR;
//所有必须
va.bstrVal = str; // 而不是 va.pbstrVal =&str;

补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,