Здравствуйте, Shire, Вы писали:

S>Вот тут мучил контрол MSWinsock.Winsock (поставляется с VB Ent. Edition) из JScript (WSH).
S>У него есть методы GetData и PeekData, которые принимают ссылку на VARIANT.

S>HRESULT xxxData([in, out] VARIANT* data,[in, optional] VARIANT type,[in, optional] VARIANT maxLen);

S>Из VBScript всё замечательно, а JScript при передаче не изменяет переменную. Есть ли способ передать переменную на JScript, кроме написания своего переходника?


Начнем с того, что описание xxxData из IDL — это для умных клиентов, к которым ни VBScript, ни JScript причислить трудно.

Потому как они работают только с IDispatch интерфейсом и только так, как написано при вызове метода в их выражении. Правда, немного добавляя своих гадостей при передаче параметров через Invoke.

VBScript передает свои параметры как Variant, ссылающийся на другой Variant, содержащий реальное значение. Такой способ передачи допускает изменение входного параметра, даже если в IDL описании он — только [in].

JScript передает свои параметры как Variant, содержащий реальное значение. Такой способ передачи НЕ допускает изменение входного параметра, даже если в IDL описании он — [in,out].

Такие дела. Это просто нужно учитывать при написании объекта.
Автор: Vi2    Оценить