2

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

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

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

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

谢谢你,阿尔伯特加里耶夫

4

2 回答 2

6

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

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

于 2009-08-06T20:09:51.157 回答
0

在考虑了包装解决方法后,我发现使用现有的 COM 自动化对象与开发自己的 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/

谢谢你,阿尔伯特加里耶夫

于 2009-09-24T12:37:02.113 回答