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

如题所述

脚本语言和编译型语言之间进行通信是通过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 };
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网