带有“[in,out] BSTR *”参数的VBScript“类型不匹配”问题

时间:2009-08-06 20:03:40

标签: com vbscript bstr

我正在使用第三方COM对象,它有一些方法将值作为BSTR指针传回。由于VBscript仅支持Variant类型尝试以类似Object.Method(sMyString)的方式使用,因此合理地以“类型不匹配”错误结束。

我怀疑这个错误是由COM对象本身而不是VBscript解释器生成的,因为对象获取字符串而不是指针。我试图解决它定义字符串数组但它仍然是同样的错误。

所以我想知道是否有人有类似的问题以及使用了哪些变通方法。

只是为了强调。我无法控制COM对象。这是供应商的应用程序。我必须“按原样”使用它。

谢谢你, Albert Gareev

2 个答案:

答案 0 :(得分:6)

与其他语言相比,允许VBScript使用的类型的规则受限制。在您的情况下,您有[in, out] BSTR * - 这不受支持。 [out]参数允许的唯一类型是VARIANT *。 VBScript要求类型为[out,retval]以支持该位置的BSTR类型。当然,每个函数只能有一个[retval],所以这有点限制。

在任何情况下,您都会因为无法修改服务器代码而陷入困境。我要做的是用C ++编写一个COM包装器,它将API包装成你可以调用的东西。 COM包装器可以将[out] BSTR *更改为[out] VARIANT *或其他可用的内容。

答案 1 :(得分:0)

在考虑了包装器解决方法后,我发现使用现有的COM Automation对象与开发自己的API相比具有一些优势。

由于我已经将Excel.Application对象用于其他目的,我只是在VBA中创建了几个宏并根据需要执行它们。

我的博文中有更多详情:

http://automation-beyond.com/2009/09/21/gp-qtp-automation-sanscript/

http://automation-beyond.com/2009/09/23/gp-automation-vbscript-limitation/

谢谢你, Albert Gareev