4

我有以下创建 Microsoft COM 对象的 VBScript-Script。

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

该 COM 对象的实现在动态链接库中,该库Foo.dll使用 Microsoft Foundation Framework (MFC),尤其是Dispatch Maps机制。

调度图是这样显示的

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-Script 中。

我认识到OLE 自动化适用于 VBA 和 VBScript。但是当我运行 VBScript-Script 时,我得到了错误

错误:未知字符;代码 8000A0408;
来源:Microsoft VBScript 中的编译失败

首先我认为 VBScript-Script 中的编码是错误的,因为字符ü,但我验证它是 ANSI 编码的。我还验证了我系统上的Windows 代码页是Windows-1252西方拉丁字符集。

如果我在 Dispatch Map 中更改EinfügenEinfuegen,我断言 VBScript-Script 正在工作。

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

对我来说,解决方法是我DISP_FUNCTION在 Dispatch Map 中附加第二个 Entry 来分派Einfuegen给函数Insert。在我调用的 VBScript-Scriptfoo.Einfuegen中,在 VBA 中仍然是foo.Einfügen.

4

1 回答 1

5

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

看一下:

语法错误 (VBScript)

无效字符 (VBScript)

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

set foo = CreateObject("Bar.ProgId")
foo.[Einfügen]() 'this will work
于 2015-10-07T21:45:08.103 回答