2010-07-22 74 views
2

我正在尝试将ActiveX组件中的COM对象传递给JScript。到目前为止,我已经尝试过这样做的方法如下:将COM对象返回给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

啊。我知道了。我需要通过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; 
} 
0

当然,如果你永远只能回传,你可以传递回的IDispatch接口**或**的IUnknown,你不需要的变体,只是一个认为:)