我有以下创建 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ügen
为Einfuegen
,我断言 VBScript-Script 正在工作。
foo.Einfügen
所以我的问题是,为什么VBScript中的调用行为与 VBA 中的不同?这种行为的原因是什么?
对我来说,解决方法是我DISP_FUNCTION
在 Dispatch Map 中附加第二个 Entry 来分派Einfuegen
给函数Insert
。在我调用的 VBScript-Scriptfoo.Einfuegen
中,在 VBA 中仍然是foo.Einfügen
.