Re[2]: Это эффект IDispatch::Invoke
От: folk Россия  
Дата: 20.06.03 05:10
Оценка:
Здравствуйте, 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>Такие дела. Это просто нужно учитывать при написании объекта.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.