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

串口通信的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);//发送
...