VARIANT真麻烦,怎么用?
ad 2000-08-11 02:15:00 我写了一个ActiveX控件,有一个方法从控件中取得字符串,增加控件的方法时不能在参数表中指定BYTE *或LPSTR,而只能通过返回VARIANT的方法,但VARIANT实在复杂,下面的代码是我编写的,用起来有问题,请高手指点!
//控件中
VARIANT CFaCommCtrl::ReadData(short nMax)
{
VARIANT vaResult;
VariantInit(&vaResult);
//...
vaResult.vt = VT_ARRAY and VT_UI1; //表示是单字节数组
vaResult.parray = new SAFEARRAY;
vaResult.parray->cDims = 1; //一维
vaResult.parray->fFeatures = FADF_AUTO;
vaResult.parray->pvData = new BYTE[nMax];//存放数据
vaResult.parray->cbElements = l;
//...
return vaResult;
}
应用程序中
//m_c 是CFaCommCtrl类
VARIANT v = m_c.ReadData(10);
for(int i=0;i<v.parray->cbElements;i++){
s[i] = ((char *)v.parray->pvData)[i];
}
s[i]='\0';
执行上述过程时没有问题,但使用UpdateData(..)时出错(m_c对应CFaCommCtrl控件),去掉UpdateData(..)一切正常,但程序退出时出错,且错误窗口始终关不掉,Studio提示访问违法。