VBScript «Несоответствие типов» с параметром «[in, out] BSTR *» - PullRequest
2 голосов
/ 07 августа 2009

Я работаю со сторонним COM-объектом, некоторые методы которого передают значения в виде указателя BSTR. Поскольку VBscript поддерживает только попытки типа Variant для использования таким способом, как Object.Method (sMyString), разумно заканчивается ошибка «Несоответствие типов»

Я подозреваю, что эта ошибка генерируется самим объектом COM, а не интерпретатором VBscript, поскольку объект получает строку вместо указателя. Я попытался обойти это определение массива строк, но это все та же ошибка.

Так что мне было интересно, если у кого-то была похожая проблема и какие обходные пути использовались.

Просто чтобы подчеркнуть. У меня нет контроля над COM-объектом. Это в заявлении продавца. Я должен использовать это "как есть".

Спасибо, Альберт Гареев

Ответы [ 2 ]

6 голосов
/ 07 августа 2009

Правила для типов, которые VBScript разрешено использовать, немного ограничены по сравнению с другими языками. В вашем случае у вас есть [in, out] BSTR * - это не поддерживается. Для параметра [out] допускается только тип VARIANT *. VBScript потребует, чтобы тип был [out, retval], чтобы поддерживать тип BSTR в этой позиции. Конечно, у вас может быть только один [retval] на функцию, что несколько ограничивает.

В любом случае в вашей ситуации вы застряли, поскольку не можете изменить код сервера. Я хотел бы написать COM-оболочку на C ++, которая превращает API во что-то, что вы можете вызвать. Оболочка COM может изменить [out] BSTR * на [out] VARIANT * или что-то еще, что можно использовать.

0 голосов
/ 24 сентября 2009

После рассмотрения обходного пути обертки я обнаружил, что использование существующего объекта COM Automation имеет некоторые преимущества по сравнению с разработкой собственного API.

Поскольку я уже использую объект Excel.Application для других целей, я просто создал пару макросов в VBA и выполняю их по мере необходимости.

Подробнее в моих сообщениях в блоге:

http://automation -beyond.com / 2009/09/21 / зм-QTP-автоматизация-Sanscript /

http://automation -beyond.com / 2009/09/23 / зм-автоматизация-VBScript-ограничение /

Спасибо, Альберт Гареев

...