CComSafeArrayを使って生成した配列を返すCOMのメソッド
CComSafeArrayクラスを使うと、以下のように簡単にSAFEARRAY構造体を簡単に扱うことができる。
STDMETHODIMP CHoge::get_Array(VARIANT* pVal)
{
VariantInit(pVal);
pVal->vt = VT_ARRAY | VT_BSTR;
CComSafeArray<BSTR> psa;
psa.Add(ComBSTR("hoge"));
psa.Add(ComBSTR("fuga"));
psa.Add(ComBSTR("moge"));
pVal->parray = psa.Detach();
retern S_OK;
}
最後のほうの、psa.Detach()がミソらしい。
こうしないと、この関数から受け取った配列にアクセスしようとしたとき”ロックされている”とかなんとかエラーが出てしまう。