1. javascript代码如下 <html> <body> <script language=javascript> var arArray = new Array("1","sadf","2","asdff","test"); if (document.AtlComId){ document.AtlComId.putVariant(arArray); } </script> <object classid="clsid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" id="AtlComId" width="100" height="100"> </object> </body> <html> 2. COM接口定义如下// 通过js的数组传进来的IDispatch,根据js数组下标来获取数组元数 int CXXXX::getValueOfIDs(IDispatch* pDisp, int i, VARIANT *varValue) { if ((pDisp != NULL) && (i >= 0)) { CComVariant varName(i,VT_I4); varName.ChangeType(VT_BSTR); DISPID dispId; HRESULT hr = pDisp ->GetIDsOfNames(IID_NULL,&varName.bstrVal,1,LOCALE_USER_DEFAULT,&dispId); if (FAILED(hr)){ return 0; } DISPPARAMS noArgs = { NULL, NULL, 0, 0 }; hr = pDisp ->Invoke( dispId, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs, varValue, NULL, NULL ); if (SUCCEEDED(hr)){ return 1; } } return 0; } STDMETHODIMP CXXXX::putVariant(VARIANT varArray) { HRESULT hr = S_OK; VARTYPE vt = varArray.vt; if (vt == VT_DISPATCH) { //deal with javascript array CComVariant varValue; IDispatch* pDisp = varArray.pdispVal; //获取JS字符数组 int i, iLen, iret; iLen = 5; i = iret = 0; for (i = 4; i < nLen; i++) { iret = getValueOfIDs(pDisp,0,&varValue); if (iret != 0){ varValue.ChangeType(VT_BSTR); CComBSTR bstrShowVal = varValue.bstrVal; } } } else { //deal with vbscript array } return S_OK; }