c++ - 从 com 对象返回数组

标签 c++ com vbscript

我想将警报名称列表从 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

关于c++ - 从 com 对象返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338879/

相关文章:

C++ - 具有相同设置的新 SFML 项目

c++ - 为什么使用 openMP 的 VC++ 矩阵时间 vector 比异步更快?

windows-7 - Powershell COM 对象 HRESULT 异常 : 0x80010108 (RPC_E_DISCONNECTED)

asp-classic - 这个 ASP 递归函数有什么问题?

asp-classic - 测试对象是否为空会导致 'Object required'错误

C++ : constructor initialization list for an array?

c++ - 从 MinGW 链接到 OpenCV 的问题

java - 如何使用 Visual Basic 6 中的 Java 类?

c# - 从 C# 使用 DirectX DLL (C++)

arrays - 如何创建 VBScript 多行数组?