2011-06-14 141 views
0

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

VBScrip是否支持安全数组?

+0

@Maanu:为什么标记为C++?在C++中,你不能从函数返回数组。 – 2011-06-14 03:56:50

+0

@Als除非他的意思是'SAFEARRAY'。 – 2011-06-14 03:59:40

+0

@Als:我们在C++中编写COM组件 – Maanu 2011-06-14 04:23:18

回答

4

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