调用VBScript过程结果类型不匹配错误

时间:2012-05-19 00:54:12

标签: com vbscript variant

我的一个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中调用这个memeber但在我的所有试验中都失败了。这是我的vbscript代码片段:

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

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

如何将程序的结果导入我的vbscript变量?

提前致谢。

1 个答案:

答案 0 :(得分: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

虽然您只能通过retval或等效对象(例如SAFEARRAY)拥有一个IXMLDOMDocument,但您可以为VBScript打包一些返回值。