[out, retval]
От: Дмитрий Наумов  
Дата: 11.04.03 10:31
Оценка:
Объясните пожалуйста, зачем приходится в IDL кроме указания у параметра метода аттрибута [out] еще добавлять и [retval]? Почему одного из них недостаточно?
... << RSDN@Home 1.0 beta 6a >>
Re: [out, retval]
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 11.04.03 10:42
Оценка: 10 (2) +1
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Объясните пожалуйста, зачем приходится в IDL кроме указания у параметра метода аттрибута [out] еще добавлять и [retval]? Почему одного из них недостаточно?



retval указывает, что параметр будет возвращаемы параметром.
out — параметров может быть несколько
а retval — один. Именно его и будет возвращать функция, например бейсиковская.
В бейсике, как ты знаешь, нет HRESULT. Методы возвращают то, что подписано как retval
Re[2]: [out, retval]
От: Дмитрий Наумов  
Дата: 11.04.03 10:46
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:

PE>Здравствуйте, Дмитрий Наумов, Вы писали:


ДН>>Объясните пожалуйста, зачем приходится в IDL кроме указания у параметра метода аттрибута [out] еще добавлять и [retval]? Почему одного из них недостаточно?


PE>

PE>retval указывает, что параметр будет возвращаемы параметром.
PE>out — параметров может быть несколько
PE>а retval — один. Именно его и будет возвращать функция, например бейсиковская.
PE>В бейсике, как ты знаешь, нет HRESULT. Методы возвращают то, что подписано как retval

То есть, можно сделать вывод, что retval нужен для Васика и ему сочувствующих? То есть если я хочу сделать гадость чтобы тока из плюсов можно было достать этот метод то достаточно retval проскипать?
... << RSDN@Home 1.0 beta 6a >>
Re[3]: [out, retval]
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 11.04.03 10:54
Оценка: :)
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>То есть, можно сделать вывод, что retval нужен для Васика и ему сочувствующих? То есть если я хочу сделать гадость чтобы тока из плюсов можно было достать этот метод то достаточно retval проскипать?


Не для Васика, а для Басика. Васик — VC.
Чтобы басик не видел, установи проперти всего метода hidden, restricted
Re[4]: [out, retval]
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 11.04.03 11:02
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:

PE>Чтобы басик не видел, установи проперти всего метода hidden, restricted


Ну а все таки, если "retval поскипать"? Тоже в Басике не пройдет? И если не пройдет, то с какими симптомами?
... << RSDN@Home 1.0 beta 6a >>
Re[5]: [out, retval]
От: Tom Россия http://www.RSDN.ru
Дата: 11.04.03 11:20
Оценка: 8 (1)
Здравствуйте, Михаил Можаев, Вы писали:

ММ>Здравствуйте, Plutonia Experiment, Вы писали:


PE>>Чтобы басик не видел, установи проперти всего метода hidden, restricted


ММ>Ну а все таки, если "retval поскипать"? Тоже в Басике не пройдет? И если не пройдет, то с какими симптомами?


да можно скипать спокойно. вызов метода просто будет не такой :
MyResult = MyObj.MyMethod


а такой
MyObj.MyMethod MyResult


и всё. просто с retval читаемость лучше.
... << RSDN@Home 1.0 beta 6a >>
Народная мудрось
всем все никому ничего(с).
Re[6]: [out, retval]
От: Дмитрий Наумов  
Дата: 11.04.03 11:30
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>да можно скипать спокойно. вызов метода просто будет не такой :

Tom>
Tom>MyResult = MyObj.MyMethod
Tom>


Tom>а такой

Tom>
Tom>MyObj.MyMethod MyResult
Tom>


Tom>и всё. просто с retval читаемость лучше.


Куда ни глянь, все совершают доп. телодвижения, лишь бы Басиковцам жилось проще и лучше!
... << RSDN@Home 1.0 beta 6a >>
Re[7]: [out, retval]
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 11.04.03 11:46
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Куда ни глянь, все совершают доп. телодвижения, лишь бы Басиковцам жилось проще и лучше!


Чтобы потом, когда "Басиковцы" начнут пользовать твой компонент (а они не только начнут, но и, вполне возможно, их будет больше), тебе самому жилось проще и лучше (т.е. не было бы лишних вопросов "почему" и "зачем").

... << RSDN@Home 1.0 beta 6a >>
Re: Немного о [out, retval]
От: Vi2 Удмуртия http://www.adem.ru
Дата: 11.04.03 11:47
Оценка: 78 (5)
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Объясните пожалуйста, зачем приходится в IDL кроме указания у параметра метода аттрибута [out] еще добавлять и [retval]? Почему одного из них недостаточно?

  1. Потому, что таково требование СОМ для свойств (в частности Get-аксессор [propget]).

    A function that has the propget attribute should also have, as its last parameter, a pointer type with the [out] and [retval] attributes. If the last parameter does not have the [out, retval] attributes, the return value of the function is treated as an [out, retval] parameter. For example, a function with the prototype

    [propget] short MyFunction([in] long aLongValue);
    is treated as
    [propget] HRESULT MyFunction([in] long aLongValue, [out,retval] short *outValue);

  2. Для того, чтобы позволить для некоторых (в том числе и С++) языков некоторый более естественный синтаксис операторов присваивания или вызова функции. А также для того, чтобы отличать вызов функции от вызова подпрограммы.
      Информация = p.СделайЭтоИВерниОпределеннуюИнформацию(Параметр1, ..., ПараметрN) ' VB сиснтаксис
    или
      Информация = p->СделайЭтоИВерниОпределеннуюИнформацию(Параметр1, ..., ПараметрN)

  3. Для того, чтобы не указавать такой параметр при вызове этой функции, если он не интересует.
      p.СделайЭтоИВерниОпределеннуюИнформацию(Параметр1, ..., ПараметрN); // не VB сиснтаксис
    или
      p->СделайЭтоИВерниОпределеннуюИнформацию(Параметр1, ..., ПараметрN);

  4. Для того, чтобы облегчить клиенту прием данных, а серверу передачу. Это вытекает из предыдущего. Например, в скриптах данные хранятся в виде VARIANTа, а сервер возвращает простые данные — числа и т.п. Поэтому скрипт (и VB в том числе) постарается "запихать" то, что сервер возвращает, к себе в данные. Ведь проще реализовать
    [propget] HRESULT MyFunction([out,retval] short *outValue);
    чем
    [propget] HRESULT MyFunction([out,retval] VARIANT *outShortValue);

  5. Для того, чтобы указать через какой параметр Invoke получать такой параметр. [out] и [out,retval] передаются в разных параметрах Invoke. Это не актуально для vtable-вызовов.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Забыл убрать retval в пункте 4
От: Vi2 Удмуртия http://www.adem.ru
Дата: 11.04.03 11:54
Оценка:
Здравствуйте, Vi2, Вы писали:

В пункте 4 следует читать:
чем
[] HRESULT MyFunction([out] VARIANT *outShortValue);
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[3]: Забыл убрать retval в пункте 4
От: Дмитрий Наумов  
Дата: 11.04.03 12:02
Оценка:
Здравствуйте, Vi2, Вы писали:

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


Vi2>В пункте 4 следует читать:

Vi2>
Vi2>чем
Vi2>[] HRESULT MyFunction([out] VARIANT *outShortValue);
Vi2>


Все равно хорошо ответил!
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.