如何实现IE Trident引擎下C与JavaScript的互调功能?
摘要:我们知道实现C++和Javascript通讯有下表5种接口: 引擎编写语言API接口C、C++与JavaScript交互(变量、函数、类)vc2005编译静态库的大小示
我们知道实现C++和Javascript通讯有下表5种接口:
引擎
编写语言
API接口
C、C++与JavaScript交互(变量、函数、类)
vc2005编译静态库的大小
示例EXE的大小
执行、解析JavaScript的速度
Google V8
C++
C++
可以
23.1M
1.1M
最快
Firefox3.5以前 SpiderMonkey
C
C
可以
1.3M
500K
慢
Firefox高版本SpiderMonkey
C++
C
可以
15.3M
1.7M
一般
Webkit JavaScriptCore
C++
C
可以
26.2M
1.4M
一般
IE
未知
COM
可以
未知
100K(没有链接库)
一般
IE的Trident引擎是非开源的,微软JavaScript引擎也是非开源的。微软对外提供了一组COM接口。使用这组COM接口,能够将微软的JavaScript、VBScript嵌入到C、C++、VB、C#等宿主语言中。
说到底其实也没什么好说的,先定义一个 CComPtr<IDispatch> 对象,然后调用其对象的Invoke函数,只要弄清楚他的参数正确的传递就好了。
除此之外该接口还提供有一种简易的方法。
CComPtr<IDispatch> Obj;
CComVariant var(true);
if( FAILED(Obj.Invoke1(L"ReflowDocument", &var)) )
MessageBox(_T("Invoke ReflowDocument failed."));
另外还有Invoke0、Invoke2、InvokeN、GetProperty、PutProperty、GetIDOfName、GetPropertyByName。这些函数的实现都在\VC\atlmfc\include\atlcomcli.h头文件中有声明和实现。
