вернуть массив из com-объекта - PullRequest
0 голосов
/ 14 июня 2011

Я хочу передать список имен сигналов тревоги из COM в VBScript, используемый на страницах ASPЕсли имя метода GetAlarms, что будет подписью метода ?.Количество аварийных сигналов, возвращаемых GetAlarms, будет различным.

Поддерживает ли VBScrip Safe Array?

1 Ответ

4 голосов
/ 14 июня 2011

Объявление в файле * .idl будет выглядеть так:

[id(1)] HRESULT GetAlarms([out,retval] SAFEARRAY(VARIANT)* pAlarms);

Соответствующий метод C ++ будет выглядеть так:

STDMETHODIMP CMyClass::GetAlarms(SAFEARRAY** pAlarms)
{
    CComSafeArray<VARIANT> alarms(3);
    CComVariant value;

    value = L"First Alarm";
    alarms.SetAt(0, value);

    value = L"Second Alarm";
    alarms.SetAt(1, value);

    value = L"Third Alarm";
    alarms.SetAt(2, value);

    *pAlarms = alarms.Detach();

    return S_OK;
}

И, наконец, вот пример VBScript, который использует вышеуказанный метод:

Set obj = CreateObject("MyLib.MyClass")
a = obj.GetAlarms
For i = 0 To UBound(a)
   MsgBox a(i)
Next

В ASP, конечно, вместо MsgBox.

вы бы использовали что-то другое.
...