您的位置:首页 > Web前端 > JavaScript

js字符串数组传入Com组件里

2010-05-12 11:44 204 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: