1

我的一个 COM 对象有一个以下成员,它在第二个参数中返回字节数组及其长度。

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

我试图在 VBScript 中调用这个成员,但在我所有的试验中都失败了。这是我的 vbscript 代码片段:

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

但是在第 3 行,遇到类型不匹配错误...

如何将过程中的结果放入我的 vbscript 变量中?

提前致谢。

4

1 回答 1

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

尽管您只能拥有一个retvalbySAFEARRAY或等效对象(例如IXMLDOMDocument),但您可以为 VBScript 打包多个返回值。

于 2012-11-20T22:09:04.553 回答