上篇介绍了用C++调用JavaScript,这篇反过来说说JS调C++,这样JS和C++沟通的途径就完整了。
首先,实现一个IDispatch接口,当JS调用C++函数时,系统会调用GetIDsOfNames来用函数名取得函数的DISPID,然后调用Invoke完成真正的调用,需要注意的是Invoke的pDispParams中的参数是倒序的。代码如下:
其次,实现一个IDocHostUIHandlerDispatch接口。其中最重要的是GetExternal,它返回一个CExtenalDispatch指针。
最后,在WebBrowser控制创建好后,调用SetExternalUIHandler。如下: