如果要返回的安全数组计数为零,以下代码是否有效?我该怎么办?
HRESULT GetAlarms(FAULT_TYPE eAlarmType, long alarmLevel, VARIANT* pvarAlamLst)
{
pvarAlamLst->vt = VT_ARRAY |VT_VARIANT;
pvarAlamLst->parray = NULL;
return S_OK;
}
答案 0 :(得分:2)
pArray
是LPSAFEARRAY
,应该这样对待。因此,您需要SAFEARRAY
函数(宏)。 SAFEARRAY
没有“计数”这样的概念,它是一个可变维数组。一维SAFEARRAY
的大小为0,但2D SAFEARRAY
的大小为0x0(或1x0)。
特别是,MSDN文档VT_ARRAY
为“parray
中的指针指向数组描述符”,但NULL
未指向数组描述符。