2012-05-19 3 views
1

Один из моих COM-объектов имеет следующий член, который возвращает массив байтов и его lengh во втором аргументе.Вызов ошибки типа результатов процедуры процедуры VBScript

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

FYI,

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

Рассмотрите возможность использования retval на уровне COM:

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 

Хотя вы можете иметь только один retval с помощью SAFEARRAY или эквивалентного объекта (например IXMLDOMDocument) вы можете упаковать несколько возвращаемых значений для VBScript.

Смежные вопросы