ПРОБЛЕМА. Необходима записать в переменные rltcd, buf соответственно число и строку. В отладчике видно, что по этим адресам записываются нужные значения. Однако в JavaScript после выполнения метода значение этих переменных не изменились.
Пробывал ставить [in,out], не помогло. Удается возвращать значения в JavaScript только при объявлении метода как [out,retval], но таким способом можно вернуть значение всего одной переменной, которая обязаня стоять последним параметром в списке аргументов функции. Оба этих условия мне не подходят. Может кто-нибудь знает почему не срабатывает [out], буду очень признателен.
Здравствуйте, U4, Вы писали:
U4>interface IDsScript : IDispatch U4>{ U4> ... U4> [id(6),vararg] HRESULT ExecQuery2([out] long* rltcd, [out] BSTR* buf, ... ); U4>};
U4>JavaScript U4>... U4>ПРОБЛЕМА. Необходима записать в переменные rltcd, buf соответственно число и строку. В отладчике видно, что по этим адресам записываются нужные значения. Однако в JavaScript после выполнения метода значение этих переменных не изменились.
U4>Пробывал ставить [in,out], не помогло. Удается возвращать значения в JavaScript только при объявлении метода как [out,retval], но таким способом можно вернуть значение всего одной переменной, которая обязаня стоять последним параметром в списке аргументов функции. Оба этих условия мне не подходят. Может кто-нибудь знает почему не срабатывает [out], буду очень признателен.
Если коротко и для направления действий: JavaScript так вызывает методы через IDispatch::Invoke, что у сервера нет шансов переправить обратно параметры, не имеющие атрибута retval. Это ограничение JavaScript или "This behavior is by design".
Здесь в форуме есть информация по этому поводу. Например, поиск по лексеме out, script и т.п.
Здравствуйте, U4, Вы писали:
U4>Спасибо за информацию,
U4>А ты немог бы привести фрагмент кода, как передать массив из JavaScript в COM, чтобs работать с ним как SAFEARRAY вариантов.
U4>Если объявить Method( [in] SAFEARRAY(VARIANT)* arr ), U4>то при пере даче в него JavaScript-массив выдает ошибку не соответствие типа.
U4>Проходит толко Method( [in] VARIANT* arr). Как перейти от варианта к SAFEARRAY.
U4>Помоги, есле несложно....
Здравствуйте, U4, Вы писали:
U4>А ты немог бы привести фрагмент кода, как передать массив из JavaScript в COM, чтобs работать с ним как SAFEARRAY вариантов.