J'appelle la fonction de composants VB COM du client de VC,Comment passer tableau variant au composant VB Com de VC++
Cette fonction attend tableau VARIANT,
HRESULT setLabels (/ [in, out]/VARIANT * étiquettes)
I essayé passant tableau variant de la manière suivante,
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);
}
dans ce dans les deux sens le composant VB ne fonctionne pas comme on le souhaite. Puisque je n'ai pas de source de composants VB je ne sais pas ce qui se passe à l'intérieur, Le même composant lorsque j'accède depuis le client VB fonctionne très bien. Comment faire passer un tableau variant à un composant VB à partir de VC++?
Oui VARIANT ARRAY est un tableau de type VARIANT et aussi un type manqué pour TEMPARRAY et I editd maintenant. –