代码之家  ›  专栏  ›  技术社区  ›  Albert Gareev

vbscript“类型不匹配”问题与“[输入,输出]bstr*”参数

  •  2
  • Albert Gareev  · 技术社区  · 17 年前

    我使用的是第三方COM对象,它有一些方法将值作为BSTR指针返回。因为vbscript只支持变量类型尝试以类似object.method(smystring)的方式使用,所以合理地以“类型不匹配”错误结束。

    我怀疑这个错误是由COM对象本身生成的,而不是由VBScript解释器生成的,因为对象得到的是字符串而不是指针。我试图通过定义字符串数组来解决这个问题,但仍然是相同的错误。

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

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

    谢谢您, 阿尔伯特·加列夫

    2 回复  |  直到 16 年前
        1
  •  6
  •   1800 INFORMATION    17 年前

    vbscript允许使用的类型的规则与其他语言相比有点限制。在你的情况下,你有 [in, out] BSTR * -不支持此操作。唯一允许的类型 [out] 参数为 VARIANT * . vbscript需要类型为[out,retval]才能支持 BSTR 在那个位置键入。当然你只能吃一个 [retval] 每个函数都有一定的限制。

    在任何情况下,由于无法修改服务器代码,您都有点陷入困境。我要做的是在C++中编写一个COM包装器,将API封装成可以调用的东西。COM包装程序可以更改 [out] BSTR * 到 [out] VARIANT * 或者其他有用的东西。

        2
  •  0
  •   Albert Gareev    16 年前

    在考虑了包装解决方案之后,我发现使用现有的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/

    谢谢您, 阿尔伯特·加列夫

    推荐文章