请教,javascript中要传二进制数据到activex,该怎么做? 能否用字符串来实现?此二进制数据是一个结构来的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JS代码:var arArray = new Array("1","sadf","2","asdff","test");if( document.ObjectId) document.ObjectId.putVariant(arArray);VC代码, 接口实现: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 nLen = 5; for( int i=0; i<nLen; i++ ) { int nret = getValueOfIDs(pDisp,i,&varValue); if( nret ){ varValue.ChangeType(VT_BSTR); CComBSTR bstrShowVal = varValue.bstrVal; } }}else{//deal with vbscript array}return S_OK;}// 通过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;} C++中关于vector的问题 ado连接查询,如何逐个访问结果 刚装的VS2008 初体验遇到的小问题! 资源索求 关于指针转换的问题 鹦鹉come on-对话框象素计算的问题 请问VC中想要调试Release版本该如何设置? exe如何传入参数 按钮的重画,显示问题! 在线... 关于listctrl的问题. 串口传输问题 请推荐一款好的用C++/C写的UI库
var arArray = new Array("1","sadf","2","asdff","test");
if( document.ObjectId) document.ObjectId.putVariant(arArray);VC代码, 接口实现: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 nLen = 5; for( int i=0; i<nLen; i++ )
{
int nret = getValueOfIDs(pDisp,i,&varValue);
if( nret ){
varValue.ChangeType(VT_BSTR);
CComBSTR bstrShowVal = varValue.bstrVal;
} }}
else
{
//deal with vbscript array
}
return S_OK;
}// 通过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;
}