2011-06-14 122 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