将COM对象返回给JScript

时间:2010-07-22 21:47:27

标签: c++ activex javascript

我正在尝试将一个COM对象从ActiveX组件传递给JScript。到目前为止,我已经尝试了以下方法:

STDMETHODIMP CHSNetwork::CreateIPPPacket(VARIANT ** ppv)
{
    IIPPacket *iipp;
    HRESULT hr = CoCreateInstance(CLSID_IPPacket, NULL, CLSCTX_ALL, IID_IIPPacket, (void **)&iipp);
    if(SUCCEEDED(hr) && ppv)
    {
        CComVariant cvar((IUnknown *)iipp);
        hr = cvar.Detach(*ppv);
    }

    return hr;
}

以下JScript导致错误Variable uses an Automation type not supported in JScript

var hsn = new ActiveXObject("ZIENetwork.HSNetwork");
var ipp = hsn.CreateIPPPacket();

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

阿。我知道了。我需要传递VARIANT *而不是VARIANT **。我想我仍然对指针指针感到困惑,因为它与COM的返回值有关。

因此正确的代码是:

STDMETHODIMP CHSNetwork::CreateIPPPacket(VARIANT * ppv)
{
    // TODO: Add your implementation code here
    IIPPacket *iipp;
    HRESULT hr = CoCreateInstance(CLSID_IPPacket, NULL, CLSCTX_ALL, IID_IIPPacket, (void **)&iipp);
    if(ppv)
    {
        CComVariant cvar((IUnknown *)iipp);
        hr = cvar.Detach(ppv);
    }

    return hr;
}

答案 1 :(得分:0)

当然,如果你只传回一个界面,你可以传回一个IDispatch **或IUnknown **,你不需要VARIANT,只是想一想:)