将ActiveX中的数据导出为js中的对象
来源:互联网 发布:上海数据港曾犁简历 编辑:程序博客网 时间:2024/05/22 06:28
假设要开发一个ActiveX控件,其中有一个方法GetMyData(),它返回一个对象;该对象拥有两个属性,id和name。
现在,我们想要在js中使用这个对象;
var ax = new ActiveXObject("...");
var mydata = ax.GetMyData();
mydata.id ...
mydata.name ...
通过一般的继承自IDispatch或IDisptachImpl<...>的方法,我们可以实现对属性或方法的访问:
class ATL_NO_VTABLE CMyData :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyData, &CLSID_MyData>,
public IDispatchImpl<IMyData, &IID_IMyData, &LIBID_MYLib>
但是,用这种方法,无法支持for(var i in mydata)这种js循环。
想要达到目的,就需要使用js中的数据类型:IDispatchEX。
首先,在IDL中添加:
import "dispex.idl";
并修改IMyData:IDispatch为:
IMyData: IDispatchEx
其次,在CMyData的头文件MyData.h中添加:
#include <dispex.h>
并修改
BEGIN_COM_MAP(CMyData)
COM_INTERFACE_ENTRY(IMyData)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
为:
BEGIN_COM_MAP(CMyData)
COM_INTERFACE_ENTRY(IMyData)
COM_INTERFACE_ENTRY(IDispatchEx)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
最后,实现IDispatchEX接口:
virtual HRESULT STDMETHODCALLTYPE GetDispID(
/* [in] */ BSTR bstrName,
/* [in] */ DWORD grfdex,
/* [out] */ DISPID __RPC_FAR *pid)
{
...
}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE InvokeEx(
/* [in] */ DISPID id,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [in] */ DISPPARAMS __RPC_FAR *pdp,
/* [out] */ VARIANT __RPC_FAR *pvarRes,
/* [out] */ EXCEPINFO __RPC_FAR *pei,
/* [unique][in] */ IServiceProvider __RPC_FAR *pspCaller)
{
...
}
virtual HRESULT STDMETHODCALLTYPE DeleteMemberByName(
/* [in] */ BSTR bstr,
/* [in] */ DWORD grfdex)
{
...
}
virtual HRESULT STDMETHODCALLTYPE DeleteMemberByDispID(
/* [in] */ DISPID id)
{
...
}
virtual HRESULT STDMETHODCALLTYPE GetMemberProperties(
/* [in] */ DISPID id,
/* [in] */ DWORD grfdexFetch,
/* [out] */ DWORD __RPC_FAR *pgrfdex)
{
...
}
virtual HRESULT STDMETHODCALLTYPE GetMemberName(
/* [in] */ DISPID id,
/* [out] */ BSTR __RPC_FAR *pbstrName)
{
...
}
virtual HRESULT STDMETHODCALLTYPE GetNextDispID(
/* [in] */ DWORD grfdex,
/* [in] */ DISPID id,
/* [out] */ DISPID __RPC_FAR *pid)
{
...
}
virtual HRESULT STDMETHODCALLTYPE GetNameSpaceParent(
/* [out] */ IUnknown __RPC_FAR *__RPC_FAR *ppunk)
{
...
}
另外一种方法是直接使用js接口,具体方法可参考:
VC中如何创建JavaScript的Array对象:http://4develop.in/csdn/VC/20091229_14_147ed93c-9fd8-4fa5-83ea-9c93083ee9c9/1
- 将ActiveX中的数据导出为js中的对象
- 将MongoDB中的数据导出为表格
- C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)
- 将数据库中的数据导出为XML数据
- MS SQLServer 将Table中的数据导出为insert语句
- C#将DataGridView中的数据导出为EXCEL
- C#将DataGridView中的数据导出为EXCEL
- C#将DataGridView中的数据导出为EXCEL
- 将数据库中的二进制数据导出为文件
- 将DataGrid中的数据导出为Excel的方法
- C#将DataGridView中的数据导出为EXCEL
- C#将DataGridView中的数据导出为EXCEL
- 将数据库中的数据导出为excel文件 HSSFWorkBooK用法
- 将Sql Server数据库中的数据导出为Sql文件
- 将SQL Server 2005中的数据导出为Excel
- 将MSHFlexgrid中的数据导出为Excel文件
- 机房收费-将MSHFlexgrid中的数据导出为Excel文件
- MSSQL将表中的数据导出为SQL语句
- s3c2440的AD驱动(查询方式)
- 解线性超定方程
- 常用数据结构--线性结构
- Linux配置教程之一:CentOS 网络配置
- winsock编程使用HTTP代理(一)
- 将ActiveX中的数据导出为js中的对象
- poj 1005 I Think I Need a Houseboat
- s3c2440的AD驱动(中断方式)
- SSIS 把sql中表的数据导入到另一个表时的一个错误
- trie树
- 3秒搞定!~~ 一亿数据获取前100个最大值
- oracle性能调优之--Oracle 硬解析与软解析
- 关于蓝光影碟,有一些常识,你不一定知道
- C++ 中字符数组的使用方法