■
JavaScript内のArray(VARIANT型)をCOMへ投げ入れてみたが、keyは文字型になる。
JavaScript :
var ar = [1,2,3];
var map = { "first":1,"second":2,"third":3 };// obj is CListCom Variant
obj.Set( ar );
obj.Set( map );C++ :
STDMETHODIMP CListCom::Set( VARIANT varray )
{
// ar_ : std::vector
ar_.clear();
CComPtrdx;
if ( varray.vt == VT_DISPATCH && S_OK == varray.pdispVal->QueryInterface( &dx ))
{
DISPID dispid;
DISPPARAMS dispParamsNoArgs = {0};HRESULT hr = dx->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
while( hr != S_FALSE)
{
// get key
CComBSTR key;
if ( S_OK != dx->GetMemberName( dispid, &key ) ) // "0","1","2" or "first","second","third"
break;
// get value
CComVariant varItem;
hr = dx->InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispParamsNoArgs, &varItem, NULL, NULL);
ar_.push_back( varItem ); // 1,2,3
hr = dx->GetNextDispID(fdexEnumAll, dispid, &dispid);
}
}
return S_OK;
}
listにしても、keyは文字型なので遅そうだ。