【问题标题】:return array from com object从 com 对象返回数组
【发布时间】:2011-09-14 09:31:31
【问题描述】:

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

VBScrip 支持安全数组吗?

【问题讨论】:

  • @Maanu:为什么这个标签是 C++?在 C++ 中,您不能从函数返回数组。
  • @Als 除非他指的是SAFEARRAY
  • @Als:我们正在用 C++ 编写 COM 组件
  • VBScript 需要 SAFEARRAY。
  • @Hans Passant:我可以举个例子吗?

标签: c++ com vbscript


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多