Вызов процедуры несоответствия типов результатов процедуры VBScript

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

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);
....

Я пытаюсь вызвать этот член в VBScript, но потерпел неудачу во всех моих испытаниях. Вот мой фрагмент кода VBScript:

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

Но в строке 3 встречается ошибка несоответствия типов...

Как я могу получить результат от процедуры в мои переменные VBScript?

Заранее спасибо.

1 ответ

Рассмотреть возможность использования 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.

Другие вопросы по тегам