0
我打電話從VC++客戶VB COM組件功能傳遞給VB COM組件,如何變體陣列從VC++
此功能期待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組件?
是的VARIANT ARRAY是VARIANT類型的數組,也是我錯過了TEMPARRAY的類型,現在我編輯了。 – 2011-11-17 11:49:43