程序如下:if (2 == m_DataPort.GetCommEvent())
{
static VARIANT Rec_Data = m_DataPort.GetInput();
int Data_Len = Rec_Data.parray->rgsabound->cElements;
memcpy(CommDataBuff, Rec_Data.parray->pvData, Data_Len);
}
其中m_DataPort为MSCOMM控件在包装类,我在MFC下使用。
注,我肯定不是CommDataBuff数组太小的问题,因为它其实很大,而且我只向串口送了几个字节的数据而已。错误就是读0地址错误,一点调试就跳到memcpy.asm这个文件,里面是memcpy和memove函数的实现代码(汇编)。
我将static VARIANT Rec_Data = m_DataPort.GetInput();
改为VARIANT Rec_Data = m_DataPort.GetInput();
错误没了,但我仍然无法断定就是静态变量的问题,因为有可能是MSCOMM控件无法向静态变量里写值。
{
static VARIANT Rec_Data = m_DataPort.GetInput();
int Data_Len = Rec_Data.parray->rgsabound->cElements;
memcpy(CommDataBuff, Rec_Data.parray->pvData, Data_Len);
}
其中m_DataPort为MSCOMM控件在包装类,我在MFC下使用。
注,我肯定不是CommDataBuff数组太小的问题,因为它其实很大,而且我只向串口送了几个字节的数据而已。错误就是读0地址错误,一点调试就跳到memcpy.asm这个文件,里面是memcpy和memove函数的实现代码(汇编)。
我将static VARIANT Rec_Data = m_DataPort.GetInput();
改为VARIANT Rec_Data = m_DataPort.GetInput();
错误没了,但我仍然无法断定就是静态变量的问题,因为有可能是MSCOMM控件无法向静态变量里写值。
但是用MSCOMM控件取数的时候,它是将数据放在一个VARIANT型数据里面的,而VARIANT这种数据类型很难以使用,所以我将它的数据拷贝到了CommDataBuff中。
“分配固定的存储空间”这句话是对的,但你看看VARIANT的定义吧,数据是放在一个指针里的,就比如:
static int* p;虽然p的存储空间是固定的,4字节,但它指向的地址里面存放的数据却是完全可变的。
因为你可以任意的给p赋新的地址,想让它指向哪就指向哪。