【问题标题】:Is it possible to pass wide NULL characters to ActiveX?是否可以将宽 NULL 字符传递给 ActiveX?
【发布时间】:2014-11-18 09:39:46
【问题描述】:
[id(0x60020021), helpstring("method FileWriting")]
void FileWriting(
        [in] BSTR buffer);

我希望能够将包含 NULL 字符的 BSTR 传递给 ActiveX 控件(这不是我的,所以我无法修改代码)。

仅通过 BSTR 参数使用 WriteFile 的代码中没有 NULL 过滤器,但我如何将 Wide NULL(0x 00 00) 传递给 ActvieX?有可能吗?

obj.FileWriting(unescape("%u0041%u0042%u0043")) // working

obj.FileWriting(unescape("%u0041%u0000%u0043")) // not working, just "A"

【问题讨论】:

    标签: javascript vbscript com activex bho


    【解决方案1】:

    BStr 不在乎它们是否包含空值。在 VB 或 VBS 中chr(43) & vbnull & chr(43)。一切都已经是 unicode,因此无需指定前导空字节。

    但是,null 可能会导致其他程序或组件出现意外问题。

    【讨论】:

    • vbNull 是一个整数常量,值为 1。
    【解决方案2】:

    unescape 正确处理 %u0000WScript.Echo、MsgBox 和 - 也许 - .FileWriting 不要:

    >> s = unescape("%u0041%u0000%u0042")
    >> WScript.Echo s, Len(s), LenB(s)
    >>
    A 3 6
    

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2016-05-13
      • 2018-04-17
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多