我正在从 VC++ 客户端调用 VB COM 组件函数,
此函数需要 VARIANT 数组,
HRESULT setLabels (/[in,out]/VARIANT * 标签)
我尝试通过以下方式传递变量数组,
1)
void SetLabels()
{
_variant_t arrayOfStrings[] = {"1","2","3","4" };
setLabels(arrayOfStrings);
}
2)
void SetLabels()
{
SAFEARRAY *pArray;
StringArray strArray;
strArray.push_back(_T("1,"));
strArray.push_back(_T("2,"));
strArray.push_back(_T("3,"));
strArray.push_back(_T("4,"));
ToSafeArray(&pArray, strArray);
SAFEARRAY TEMPaRRAY;
TEMPaRRAY.vt = VT_ARRAY;
TEMPaRRAY.parray = pArray;
setLabels(arrayOfStrings);
}
void ToSafeArray(SAFEARRAY **saData, const StringArray& strArray)
{
SAFEARRAYBOUND _SABound;
ATLASSERT( saData );
_SABound.lLbound = 0;
_SABound.cElements = strArray.size();
*saData = SafeArrayCreate( VT_BSTR, 1, &_SABound);
BSTR *pData;
SafeArrayAccessData(*saData, (void **)&pData );
for ( UINT i=0; i<strArray.size(); ++i)
*(pData+i) = SysAllocString(strArray[i].c_str());
SafeArrayUnaccessData(*saData);
}
在这两种方式中,VB 组件都无法按预期工作。由于我没有 VB 组件的来源,我不知道里面发生了什么,当我从 VB 客户端访问时,同一个组件工作正常。
如何将变量数组从 VC++ 传递给 VB 组件?