//JS
<BODY>
<object id="ArtiveXForWeb1" width=121 height=77 classid="CLSID:5FF56EFD-C35D-43EB-9B7D-662BF957583D" >
<param name="_Version" value="65536">
<param name="_ExtentX" value="3202">
<param name="_ExtentY" value="2037">
<param name="_StockProps" value="0" >
</object>
<input type='button' οnclick='javascript:sendMsg();' value='Click'>
<script language="javascript" type="text/javascript">
function sendMsg()
{
var arrPath=new Array();
arrPath[0]="path0";
arrPath[1]="path1";
arrPath[2]="path2";
var arrName=new Array();
arrName[0]="name0";
arrName[1]="name1";
arrName[2]="name2";
var cnt=3;
ArtiveXForWeb1.SendFilePathAndLength(arrPath,arrName,cnt);
}
</script>
</BODY>
=========================================================================================================
// CArtiveXForWebCtrl 的主调度接口
[ uuid(956990C4-95E0-47A9-B1D8-C84CE27728D3),
helpstring("ArtiveXForWeb Control 的调度接口")]
dispinterface _DArtiveXForWeb
{
properties:
methods:
[id(DISPID_ABOUTBOX)] void AboutBox();
[id(1), helpstring("方法SendFilePathAndLength")] void SendFilePathAndLength(IDispatch* FilePath, IDispatch* FileName, LONG Count);
};
=========================================================================================================
ctrl.cpp类中的函数定义与内容,当然要在ctrl.h头文件中定义
void CArtiveXForWebCtrl::SendFilePathAndLength(IDispatch* FilePath, IDispatch* FileName, LONG Count)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码
int cnt=(int)Count;
CComVariant varValue;
CString strPath;
CString strName;
for (int i=0;i<cnt;i++)
{
int nret=getValueOfIDs(FilePath,i,&varValue);
if (nret)
{
varValue.ChangeType(VT_BSTR);
//CComBSTR bstrShowVal=varValue.bstrVal;
strPath.Append(varValue.bstrVal);
strPath.Append(L",");
}
nret=getValueOfIDs(FileName,i,&varValue);
if (nret)
{
varValue.ChangeType(VT_BSTR);
strName.Append(varValue.bstrVal);
strName.Append(L",");
}
}
strPath.Append(L"/");
strPath.Append(strName);
MessageBox(strPath);
}
// 通过js的数组传进来的IDispatch,根据js数组下标来获取数组元数
int CArtiveXForWebCtrl::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;
}
控件弹出网页命令:
CString str;
str.Append(L"http://localhost/ActiveXJSExchange/Page1.htm?index=");
str.Append(L"1,2,3");
ShellExecute(m_hWnd,L"open", str,L"",L"", SW_SHOWNORMAL);