Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, Shire, Вы писали:
Vi2>S>>Вот тут мучил контрол MSWinsock.Winsock (поставляется с VB Ent. Edition) из JScript (WSH).
S>>У него есть методы GetData и PeekData, которые принимают ссылку на VARIANT.
Vi2>
S>>HRESULT xxxData([in, out] VARIANT* data,[in, optional] VARIANT type,[in, optional] VARIANT maxLen);
Vi2>
S>>Из VBScript всё замечательно, а JScript при передаче не изменяет переменную. Есть ли способ передать переменную на JScript, кроме написания своего переходника?
Vi2>Начнем с того, что описание xxxData из IDL — это для умных клиентов, к которым ни VBScript, ни JScript причислить трудно. Потому как они работают только с IDispatch интерфейсом и только так, как написано при вызове метода в их выражении. Правда, немного добавляя своих гадостей при передаче параметров через Invoke.
Vi2>VBScript передает свои параметры как Variant, ссылающийся на другой Variant, содержащий реальное значение. Такой способ передачи допускает изменение входного параметра, даже если в IDL описании он — только [in].
Vi2>JScript передает свои параметры как Variant, содержащий реальное значение. Такой способ передачи НЕ допускает изменение входного параметра, даже если в IDL описании он — [in,out].
Не согласен с этим пунктом.
Технически ничто не мешает JScript получить обратно переданные параметры. Ведь эти VARIANTы реально по указателю передаются, и JScript должен сам освободить их.
Видимо такое соглашение принято в целях безопасности, чтобы сервер чего не повредил клиенту... Хотя странно это.
Vi2>Такие дела. Это просто нужно учитывать при написании объекта.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн