Возврат COM-объекта в JScript - PullRequest
2 голосов
/ 23 июля 2010

Я пытаюсь передать объект 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 ]

2 голосов
/ 23 июля 2010

Ах.Я понял.Мне нужно было передать 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 голосов
/ 27 июля 2010

Конечно, если вы только когда-нибудь передадите обратно интерфейс, вы можете передать обратно IDispatch ** или IUnknown **, вам не нужен VARIANT, просто мысль:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...