com - VBScript "Type Mismatch"问题与 "[in, out] BSTR * "参数

标签 com vbscript bstr

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

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

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

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

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

最佳答案

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

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

关于com - VBScript "Type Mismatch"问题与 "[in, out] BSTR * "参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241076/

相关文章:

python - 使用pythonnet实例化后如何让msaccess及其属性可用?

delphi - WIA 扫描时跳过设备选择对话框

com - IClassFactory 由于以下错误 : 800a0153 而失败

hash - 生成文件的哈希值

c# - COM 无法正确地将 BSTR 从托管服务器编码到 native 客户端

c++ - _bstr_t 到 UTF-8 可能吗?

com - 使用 PowerShell : how to save IStream to file? 创建 ISO 镜像

winapi - 如何使用VBScript读取内存值?

java - 以编程方式导出 VBA 模块

c# - 尝试从 COM 组件传递 BSTR* 时 C# 中的 MarshlDirectiveException