Вызов процедуры несоответствия типов результатов процедуры 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.