我正在使用第三方COM对象,它有一些方法将值作为BSTR指针传回。由于VBscript仅支持Variant类型尝试以类似Object.Method(sMyString)的方式使用,因此合理地以“类型不匹配”错误结束。
我怀疑这个错误是由COM对象本身而不是VBscript解释器生成的,因为对象获取字符串而不是指针。我试图解决它定义字符串数组但它仍然是同样的错误。
所以我想知道是否有人有类似的问题以及使用了哪些变通方法。
只是为了强调。我无法控制COM对象。这是供应商的应用程序。我必须“按原样”使用它。
谢谢你, Albert Gareev
答案 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