在通过VARIANT传递数据时,数组类型数据传递情况比较多,下面介绍基于QT5 的建立BSTR字符串类型的SafeArray二维数组。
SAFEARRAYBOUND Bound[2];/*用于定义数组的维数和下标的起始值*/
Bound[0].lLbound = 0;
Bound[0].cElements = 10;
Bound[1].lLbound = 0;
Bound[1].cElements = 6;
SAFEARRAY* pArray = SafeArrayCreate(VT_BSTR,2,Bound);
/*通过指向数组的指针来对二维数组的元素进行间接赋值*/
BSTR (*pData)[6] = NULL; //这里是二维数组,6代表6列
SafeArrayAccessData(pArray, (void**)&pData); //和SafeArrayUnaccessData一起使用
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 6; j++)
{
QString str = "内容";
//赋值这里不要用有值的BSTR类型变量
//如下注释方法会导致数组数据出问题,原因不知,有了解的朋友烦请解惑
//BSTR bstr = SysAllocString((OLECHAR*)str.utf16());
//pData[i][j] = bstr ;
pData[i][j] = SysAllocString((OLECHAR*)str.utf16()); //QString转BSTR
}
}
SafeArrayUnaccessData(pArray); //释放指针
/*把SAFEARRAY转换为VARIANT*/
VARIANT value;
value.parray = pArray;
value.vt = VT_ARRAY|VT_BSTR;