如何实现IE中JS和VC之间的互相调用

 我来答
崔亦赤上海腐败
2015-11-23 · 超过43用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:92.2万
展开全部
脚本语言和编译型语言之间进行通信是通过IDispatch接口来行的,这里我对双接口的理论就不进行讨论,直接看看如何用WTL代码来实现。
首先定义如下的一个IDispatch实现:

1 class CExternalDisp:
2 public CComObjectRoot,
3 public IDispatch
4 {
5 public:
6 CExternalDisp(void);
7 ~CExternalDisp(void);
8
9 BEGIN_COM_MAP(CExternalDisp)
10 COM_INTERFACE_ENTRY(IDispatch)
11 END_COM_MAP()
12
13 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
14 /* [out] */ UINT *pctinfo)
15 {
16 return E_NOTIMPL;
17 }
18
19 HRESULT STDMETHODCALLTYPE GetTypeInfo(
20 /* [in] */ UINT iTInfo,
21 /* [in] */ LCID lcid,
22 /* [out] */ ITypeInfo **ppTInfo)
23 {
24 return E_NOTIMPL;
25 }
26
27 virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
28 /* [in] */ REFIID riid,
29 /* [size_is][in] */ LPOLESTR *rgszNames,
30 /* [in] */ UINT cNames,
31 /* [in] */ LCID lcid,
32 /* [size_is][out] */ DISPID *rgDispId)
33 {
34 CComBSTR bsName(*rgszNames);
35 if (bsName == L"abc")
36 {
37 *rgDispId = 2535;
38 return S_OK;
39 }
40 return E_NOTIMPL;
41
42 }
43
44 virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
45 /* [in] */ DISPID dispIdMember,
46 /* [in] */ REFIID riid,
47 /* [in] */ LCID lcid,
48 /* [in] */ WORD wFlags,
49 /* [out][in] */ DISPPARAMS *pDispParams,
50 /* [out] */ VARIANT *pVarResult,
51 /* [out] */ EXCEPINFO *pExcepInfo,
52 /* [out] */ UINT *puArgErr)
53 {
54 if (dispIdMember == 2535)
55 {
56 for (int i = 0; i < pDispParams->cArgs; ++i)
57 {
58 if( pDispParams->rgvarg[i].vt == VT_INT)
59 i = i;
60 else
61
62 i = i;
63
64 }
65
66
67 MessageBox(NULL, L"sdjlkf", L"sdl", MB_OK);
68 return S_OK;
69 }
70 return E_NOTIMPL;
71 }
72
73 };
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式