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();

CComPtr dx;
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は文字型なので遅そうだ。