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()
がミソらしい。
こうしないと、この関数から受け取った配列にアクセスしようとしたとき”ロックされている”とかなんとかエラーが出てしまう。