2012-05-19 47 views
1

我的一個COM對象具有以下成員,它在第二個參數中返回字節數組及其長度。調用VBScript過程結果類型不匹配錯誤

HRESULT GetBinaryData([out] VARIANT *pVal, [out] long *pLen); 

僅供參考,

**Part of implementation is as follows:** 
.... 
VariantInit(pVal); 
pVal->vt = VT_UI1 | VT_ARRAY; 
SAFEARRAYBOUND rgsabound[1]; 
rgsabound[0].lLbound = ARRAY_LBOUND; 
rgsabound[0].cElements = (ULONG)len; 
pVal->parray = SafeArrayCreate(VT_UI1, 1, rgsabound); 
.... 

我試圖調用此memeber在VBScript,但我所有的試驗都失敗了。這裏是我的VBScript代碼片段:

Set op = CreateObject("myserver") 
dim bytearray() 
op.GetBinaryData bytearray, bytearray_len 

但在第3行,遇到類型不匹配錯誤...

如何我可以從程序的結果到我的VBScript變量?

在此先感謝。

回答

0

考慮在COM級別使用retval

HRESULT GetBinaryData([out, retval] VARIANT *pVal); 

,因爲返回值是SAFEARRAY現有的C++仍然可以工作。在這種情況下,SAFEARRAY是給予調用者數組和長度的足夠回報。即您的C++代碼保持原樣。

你的VBScript代碼變爲:

Option Explicit 
Set op = CreateObject("myserver") 
Dim byteArray, lenArray 
byteArray = op.GetBinaryData() 
lenArray = UBound(byteArray) - LBound(byteArray) + 1 

儘管可以只具有由的SAFEARRAY手段或等效的對象(例如IXMLDOMDocument)可以打包數VBScript的返回值中的一個retval