从com对象返回数组

return array from com object

本文关键字:数组 返回 对象 com      更新时间:2023-10-16

我想将警报名称列表从COM传递到ASP页面中使用的VBScript。如果方法名称是GetAlarms,那么该方法的签名是什么?。GetAlarms返回的报警数量会有所不同。

VBScrip支持安全阵列吗?

*.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