Передача строки в VBScript функции COM, которая ожидает BSTR * - PullRequest
1 голос
/ 08 июля 2011

Я вызываю стороннюю функцию COM в моем VBScript. Сигнатура метода выглядит следующим образом:

HRESULT  ParseXML ([in] BSTR *textIn,[in] VARIANT_BOOL *aValidateIn,[out, retval] MSXML2.IXMLDOMDocument2 **aXMLDocOut)

В моем VBScript следующий вызов возвращает несоответствие типов:

Dim someText
someText = "Hello"
Dim response
response = ParseXml(someText, False)

Но передача в строковом литерале работает нормально:

Dim response
response = ParseXml("Hello", False)

Есть идеи, что мне нужно делать на стороне VBScript?

Ответы [ 2 ]

1 голос
/ 08 июля 2011

BSTR уже является указателем.
BSTR* является поэтому указателем на указатель.

То есть вы передаете строку по ссылке (ByRef textIn As String).

Когда вы передаете переменную по ссылке, типы должны совпадать.someText - это VARIANT.

Если бы вы просто передали BSTR (ByVal textIn As String), VB бы обработал преобразование для вас.

Любые идеи, что янужно сделать на стороне VBScript?

Если вы уверены, что вы хотите исправить скрипт, а не библиотеку, то обманом используйте VB-переменную, которая будет передана ref:

response = ParseXml((someText), False)
0 голосов
/ 08 июля 2011

Вы действительно написали ParseXml(somText, False) в своем сценарии?Тогда это опечатка;должно быть someText.

...