描述:
idl 中
[id(5), helpstring("method GetIF")] HRESULT GetIF([in]BSTR bstr,[out,retval]IDispatch* *pi);
服务端实现:
STDMETHODIMP CMyObject::GetIF(BSTR bstr, IDispatch **pi)
{
HRESULT hr = QueryInterface(IID_IRead,(void**)pi);
if(SUCCEEDED(hr))
return S_OK;
else
return S_FALSE;
}
interface IRead : IDispatch
{
... ...
}
在网页中怎么去调用呢?
我的服务中显示我调用 QueryInterface() 返回 S_FALSE ;
是因为我没有去实现 QueryInterface() 吗? 这个函数要我自己去实现吗?
解决方案1:
直接注册以后,可以得到一个id
然后用id.GetIF()就可以了,不过你的参数要是variant类型的。至于怎么得到这个id你可以参考很多的网页都有。
要想调用这个函数,有两点要注意:
第一:你必须使用VBScript来调用,而不是JavaScript,因为JavaScript是传值调用,而不是引用调用,也就是说你只能通过VBScript调用才能获取参数的返回值
第二:最好将你的第二个参数的类型换成VARIANT类型,而在此处,应该这样去申明你的函数
STDMETHODIMP CMyObject::GetIF(BSTR bstr, VARIANT & vaDisp)
只要注意了以上两点,一般来说,你从脚本调用接口应该是没有问题的了