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

kbi*_*ang 4 vbscript mfc ole-automation

我有以下VBScript脚本,它创建一个Microsoft COM对象.

set foo = CreateObject("Bar.ProgId")
foo.Einfügen()
Run Code Online (Sandbox Code Playgroud)

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

Dispatch Maps显示如下

BEGIN_DISPATCH_MAP(Foo, CCmdTarget)
[...]
DISP_FUNCTION(Foo, "Einfügen", Insert, VT_I2, VTS_NONE)
[...]
END_DISPATCH_MAP()
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.当我在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为EinfuegenI断言VBScript-Script正在运行.

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

对我来说,解决方法是我DISP_FUNCTION在调度图中附加第二个条目,该条目将分派Einfuegen给该函数Insert.在VBScript-Script中,我foo.Einfuegen仍然在VBA中调用foo.Einfügen.

Kul*_*gin 5

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

看一下:

语法错误(VBScript)

无效字符(VBScript)

您必须编写包含括号括起来的不受支持的字符的表达式.

set foo = CreateObject("Bar.ProgId")
foo.[Einfügen]() 'this will work
Run Code Online (Sandbox Code Playgroud)