Cela a très probablement une réponse très simple, mais je ne peux pas le comprendre.Quelle est la syntaxe correcte lors du passage de CComSafeArray à une méthode qui attend SAFEARRAY **
Je suis en train de revoir la conception du code qui ressemble à ceci:
SAFEARRAY* psa;
long* count;
HRESULT hr = pSomeInterface->ListSomething(&psa, &count);
if (SUCCEEDED(hr))
{
CComSafeArray<BSTR> sa;
if (*count > 0)
{
sa.Attach(psa);
}
}
// perform operations on sa
// allow CComSafeArray to destroy the object
return hr;
Je voudrais changer le code à quelque chose comme:
CComSafeArray<BSTR> sa;
long* count;
hr = pSomeInterface->ListSomething(&(sa.m_psa), &count);
if (SUCCEEDED(hr))
{
// perform operations on sa
}
Mais quand j'exécute ce, sa contient des ordures. Qu'est-ce qui se passe et pourquoi? Quelle est la syntaxe correcte?
Votre réponse est presque correcte, mais la conversion implicite ne fonctionne pas avec l'opérateur de référence sur l'argument 'sa'. –