У меня есть следующий IDL, который отлично работает для передачи строкового значения из JS в C ++. Код JS передает строковое значение объекту c ++ / COM.
[id(1), helpstring("method DoSomething")] HRESULT DoSomething([in] BSTR otlToken);
Теперь мне нужно добавить еще один метод, чтобы вернуть строку вызывающей стороне JavaScript. Я добавил следующее в IDL:
[id(3), helpstring("method GetValue")] HRESULT GetValue([out] BSTR *nicknames);
Разработчик, работающий на стороне JS, говорит, что он получает сообщение о неправильном количестве аргументов и других вещах в зависимости от того, пытается ли он вызвать метод или получить доступ к нему как к свойству.
Требуется ли JS вызов по ссылке, чтобы получить это, или мне нужно передать один параметр BSTR * как [in, out]?
Как я могу заставить это работать? (получение строкового значения из C ++ / IDL для вызывающей стороны JS?
Как должен выглядеть IDL и как должен выглядеть код JS?
Сам Javascript не знает, как обрабатывать значения, возвращаемые через параметры. Вы должны явно объявить, какой параметр является возвращаемым значением, иначе COM просто вернет HRESULT. Вы можете сделать это с помощью следующего.
[id(3), helpstring("method GetValue")] HRESULT GetValue([out, retval] BSTR *nicknames);
Других решений пока нет …