我们知道在C/C++语言中有函数,与函数对应的有函数指针。我们可以把一个函数指针传给一个过程,从而实现回调。
那么在脚本语言(如JavaScript)中,可以用"function"来定义一个函数,但与之相对应的却没有函数指针的概念。那么如何将这个函数传给某个过程,来实现回调的功能呢?事实上,在JavaScript中,常常将函数直接传递给一个组件的方法,实现回调。那么,反过来我们问一下,JavaScript将这个函数传入组件,到底是一个什么样的参数类型呢?
传入的参数类型即可以是IDispatch*,也可以是VARIANT(包装的仍是一个IDispatch*值)。这个函数,本质上是一个实现了IDispatch接口的对象,通过访问IDispatch接口的第一个方法,也就实现了对这个函数的回调调用。
下面的函数CCuteTools::AutoWrap以可变参数的形式,实现了对IDispatch接口中方法和属性的调用。
在写出源代码之前,我们先举一个调用它的例子。
CComPtr<IDispatch> pDispCallback; //需要回调的IDispatch接口
CComVariant vParam1="test"; //准备接收的参数1
CComVariant vParam2=(long)1234; //准备接收的参数2
CCuteTools::AutoWrap(DISPATCH_METHOD,NULL,pDispCallback,NUL