From: http://blog.csdn.net/absurd/article/details/786822
SAFEARRAY使用方法示例
SAFEARRAY不是很好用,一些函数不太直观,一不小心就着了它的道。上次学习编写Google桌面插件时就遇到了麻烦,本来应该是vsa.vt = VT_ARRAY | VT_BSTR,结果写成了vsa.vt = VT_ARRAY,让我查了好久才找到原因。这里整理一下,作为备忘。
l 创建
long i = 0; VARIANT va = {0}; va.vt = VT_BSTR;
SAFEARRAYBOUND bounds[1] = {0}; bounds[0].cElements = 5; SAFEARRAY* psa = SafeArrayCreate(VT_VARIANT, 1, bounds); |
l 存入元素
for(i = 0; i < 5; i++) { va.bstrVal = SysAllocString(L"test"); SafeArrayPutElement(psa, &i, &va); } |
l 获取元素
for(i = 0; i < 5; i++) { va.bstrVal = SysAllocString(L"test"); SafeArrayGetElement(psa, &i, &va); SysFreeString(va.bstrVal); } |
l 销毁
SafeArrayDestroy(psa); |
l 生成VARIANT变量
VARIANT vsa = {0}; vsa.vt = VT_ARRAY | VT_BSTR; vsa.parray = psa; |