VBScript:如何调用在 Dispatch Map 中用元音定义的函数

VBScript: How do I invoke a function which is defined with a vowel in the Dispatch Map

我有以下创建 Microsoft COM 对象的 VBScript 脚本。

set foo = CreateObject("Bar.ProgId")
foo.Einfügen()

该 COM 对象的实现在使用 Microsoft Foundation Framework (MFC) 的动态 Link 库 Foo.dll 中,尤其是 Dispatch Maps.[=27 的机制=]

调度图显示如下

BEGIN_DISPATCH_MAP(Foo, CCmdTarget)
[...]
DISP_FUNCTION(Foo, "Einfügen", Insert, VT_I2, VTS_NONE)
[...]
END_DISPATCH_MAP()

到目前为止一切顺利。当我在 VBA 环境中创建这样一个 COM 对象时,例如在 Excel 应用程序中,foo.Einfügen 的调用是成功的。除了在 VBScript 脚本中。

我认识到 OLE Automation 应用于 VBA 以及 VBScript。但是当我 运行 VBScript-Script 时我得到了错误

Error: unknow character; Code 8000A0408;
Source: Compile failure in Microsoft VBScript

起初我以为是 VBScript-Script 中的编码是错误的,因为 ü 这个字符,但我证实它是 ANSI 编码的。我还验证了 Windows Code Page on my system is Windows-1252 西方拉丁字符集。

如果我在 Dispatch Map 中将 Einfügen 更改为 Einfuegen,我断言 VBScript 脚本正在运行。

所以我的问题是,为什么调用 foo.Einfügen 的行为在 VBScript 中与在 VBA 中不同?这种行为的原因是什么?

对我来说,解决方法是在调度映射中附加第二个 DISP_FUNCTION 条目,将 Einfuegen 调度到函数 Insert。在我调用 foo.Einfuegen 的 VBScript-Script 中,在 VBA 中仍然是 foo.Einfügen.

命名约定。
与其大哥 VBA 和 VB6 不同,它是 VBScript 中的语法错误。 VBScript 编译器要求表达式使用单字节字符。

看看:

Syntax error (VBScript)

Invalid character (VBScript)

您必须编写包含括在括号中不受支持的字符的表达式。

set foo = CreateObject("Bar.ProgId")
foo.[Einfügen]() 'this will work