這很可能有一個非常簡單的答案,但我無法弄清楚。將CComSafeArray傳遞給期望SAFEARRAY的方法時,正確的語法是什麼**
我試圖重構一些代碼,看起來像這樣:
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;
我想代碼更改爲類似:
CComSafeArray<BSTR> sa;
long* count;
hr = pSomeInterface->ListSomething(&(sa.m_psa), &count);
if (SUCCEEDED(hr))
{
// perform operations on sa
}
但是,當我執行此山中含有垃圾。發生了什麼,爲什麼?什麼是正確的語法?
你的回答幾乎是正確的,但隱式轉換不能與`sa`參數上的引用運算符一起使用。 – 2012-02-03 17:52:30