2010-07-22 4 views
2

Я пытаюсь передать объект COM из компонента ActiveX в 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 **, вам не нужно VARIANT, просто мысль