2015-10-07 3 views
3

У меня есть следующий скрипт VBScript, который создает COM-объект Microsoft.VBScript: Как вызвать функцию, которая определена с помощью гласного на карте отправки

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

Реализация этого COM-объекта находится в Dynamic Link Library Foo.dll, который использует Структуру Microsoft Foundation (MFC) и особенно механизм Dispatch Maps.

диспетчерских Карты показывают, как этот

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

До сих пор так хорошо. Когда я создаю такой COM-объект в среде VBA, например, в приложении 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 в моей системе Windows-1252 Западно-Латинский набор символов.

Если я изменяю Einfügen на Einfuegen на карте отправки Я утверждаю, что работает скрипт VBScript.

Так что мой вопрос: почему поведение вызова foo.Einfügen отличается от VBScript, чем в VBA? В чем причина такого поведения?

Для меня обходным путем является то, что я добавляю второй DISP_FUNCTION Ввод на карте отправки, который отправляет Einfuegen в функцию Insert. В VBScript-Script я вызываю foo.Einfuegen и в VBA все еще foo.Einfügen.

ответ

4

Соглашения об именовании.
В отличие от своих более крупных братьев VBA и VB6, это синтаксическая ошибка в VBScript. Компилятор VBScript ожидает однобайтовых символов для выражений.

Посмотрите:

Syntax error (VBScript)

Invalid character (VBScript)

Вы должны написать выражения, содержащие недопустимые символы, заключенные в скобки.

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

Да, это работает! Большое спасибо. :-) – kbisang

+0

Удивительный, меня интересовал этот вопрос отличный ответ! – Lankymart

+0

Lankymart с использованием скобок также полезен с «зарезервированными словами». посмотрите http://stackoverflow.com/a/8887247/893670 –

Смежные вопросы