C++ 如何将COleVariant转换为CString c++;
我的MFC中有这个:C++ 如何将COleVariant转换为CString c++;,c++,mfc,C++,Mfc,我的MFC中有这个: CByteArray data; data.SetSize(9); data[0]='*'; data[1]=xG; data[2]=','; data[3]=yG; data[4]=','; data[5]=xL; data[6]=','; data[7]=yL; data[8]='#'; if(m_comm.get_PortOpen()){ //mscomm serial UpdateData(TRUE); m_comm.put_Output(COl
CByteArray data; data.SetSize(9);
data[0]='*';
data[1]=xG;
data[2]=',';
data[3]=yG;
data[4]=',';
data[5]=xL;
data[6]=',';
data[7]=yL;
data[8]='#';
if(m_comm.get_PortOpen()){ //mscomm serial
UpdateData(TRUE);
m_comm.put_Output(COleVariant(data));
m_StrKirim=COleVariant(data);
UpdateData(FALSE);
}
结果m_StrKirim
与汉字idk相似
目标是将数据(数组)制作成一个字符串,并将其复制到CString
变量中,然后将其显示到m_StrKirim
(编辑控件)
我尝试了使用关键字
colevantial
到CString
的教程,但它不起作用。尽管CString
有一个构造函数将VARIANT
作为输入,但通过OLE将字节数组转换为CString
没有多大意义
字节数组表示ASCII字符串,因此需要告诉CString
将字节数组视为char
字符串CString
有一个构造函数,它接受char*
和长度作为输入,并根据需要将char
数据转换为CString
的本机字符类型
试试这个:
m_StrKirim = CString(reinterpret_cast<char*>(data.GetData()), data.GetSize());
m_StrKirim=CString(reinterpret_cast(data.GetData()),data.GetSize());
注意,可以通过设置\u CSTRING\u DISABLE\u show\u WIDE\u conversion
预处理器符号来禁用转换选择器。调用而不是使用神奇的值可能也是明智的。强制转换还应指定char const*
作为其目标类型。@i关于GetSize
的一个可检测的优点。不过,const
cast不是必需的data
不是const
,可以将char*
变量传递给char const*
参数。没有明显的原因说明这不起作用,OleVariant可以将CByteArray转换为COM兼容的SAFEARRAY,这应该会让MSComm感到高兴。它不是字符串,您肯定不想用CString做任何事情。如果你看到“中文”,将二进制数据解释为Unicode字符串的典型结果,那么就认为这是一个问题,它是接收这个数据的代码或用什么工具来查看输出的问题。顺便说一句,删除对MSComm的依赖是明智的,因为它早已过期。