Проблема с IDispatch
От: -realex-  
Дата: 19.05.06 11:20
Оценка:
Как предоставить через IDispatch метод с неизвестным количеством параметров, со значениями параметров по умолчанию?
Re: Проблема с IDispatch
От: Константин Л.  
Дата: 19.05.06 11:53
Оценка:
Здравствуйте, -realex-, Вы писали:

R>Как предоставить через IDispatch метод с неизвестным количеством параметров, со значениями параметров по умолчанию?


SAFEARRAY
Re: Проблема с IDispatch
От: algol Россия about:blank
Дата: 19.05.06 11:55
Оценка: -1
Здравствуйте, -realex-, Вы писали:

R>Как предоставить через IDispatch метод с неизвестным количеством параметров, со значениями параметров по умолчанию?


В определении метода набивается масимально возможное количество параметров (например 10), для каждого параметра указывается атрибут defaultvalue или optional, если параметр VARIANT. Например [in, defaultvalue(0)] int Param.
Re: Проблема с IDispatch
От: Left2 Украина  
Дата: 19.05.06 12:33
Оценка:
R>Как предоставить через IDispatch метод с неизвестным количеством параметров, со значениями параметров по умолчанию?

Кому предоставить? Если, к примеру, тебе нужен метод для вызова из VBScript/JavaScript тогда сделай сам реализацию Invoke и твори там что хош — параметры интерпретируй как душе будет угодно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: 2 Vovik1982
От: algol Россия about:blank
Дата: 19.05.06 13:56
Оценка:
Чем мотивируем свой минус? Посмотрите например как объявлены в Excel функции Min, Max, Count, Sum, Average, And, Or и т.п. с переменным числом параметров:

    double Sum (
        const _variant_t & Arg1,
        const _variant_t & Arg2 = vtMissing,
        const _variant_t & Arg3 = vtMissing,
        const _variant_t & Arg4 = vtMissing,
        const _variant_t & Arg5 = vtMissing,
        const _variant_t & Arg6 = vtMissing,
        const _variant_t & Arg7 = vtMissing,
        const _variant_t & Arg8 = vtMissing,
        const _variant_t & Arg9 = vtMissing,
        const _variant_t & Arg10 = vtMissing,
        const _variant_t & Arg11 = vtMissing,
        const _variant_t & Arg12 = vtMissing,
        const _variant_t & Arg13 = vtMissing,
        const _variant_t & Arg14 = vtMissing,
        const _variant_t & Arg15 = vtMissing,
        const _variant_t & Arg16 = vtMissing,
        const _variant_t & Arg17 = vtMissing,
        const _variant_t & Arg18 = vtMissing,
        const _variant_t & Arg19 = vtMissing,
        const _variant_t & Arg20 = vtMissing,
        const _variant_t & Arg21 = vtMissing,
        const _variant_t & Arg22 = vtMissing,
        const _variant_t & Arg23 = vtMissing,
        const _variant_t & Arg24 = vtMissing,
        const _variant_t & Arg25 = vtMissing,
        const _variant_t & Arg26 = vtMissing,
        const _variant_t & Arg27 = vtMissing,
        const _variant_t & Arg28 = vtMissing,
        const _variant_t & Arg29 = vtMissing,
        const _variant_t & Arg30 = vtMissing );
Re[2]: Проблема с IDispatch
От: -realex-  
Дата: 19.05.06 19:02
Оценка:
L>Кому предоставить? Если, к примеру, тебе нужен метод для вызова из VBScript/JavaScript тогда сделай сам реализацию Invoke и твори там что хош — параметры интерпретируй как душе будет угодно.

Да, я создаю NamedItem в ActiveScriptHost. Спасибо за ответы — сделаю, как в Excel. Не очень красиво, но работать должно.
Re: Проблема с IDispatch
От: Vi2 Удмуртия http://www.adem.ru
Дата: 22.05.06 04:15
Оценка: +1
Здравствуйте, -realex-, Вы писали:

R>Как предоставить через IDispatch метод с неизвестным количеством параметров, со значениями параметров по умолчанию?


Неизвестное количество параметров представляется атрибутом [vararg].
А значения по умолчанию для неизвестных параметров — это что-то новенькое и требует раскрытия или хотя бы примера для понимания.

Если метод принимает произвольное число параметров, то вызов "Method a,b,c" передаст именно эти три параметра и никаких других (ведь сколько именно нужно параметров неизвестно), а вызов "Method ,,c" передаст три параметра с пропущенными первыми двумя, и сервер может сам подставить необходимые умолчательные значения.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Проблема с IDispatch
От: -realex-  
Дата: 22.05.06 18:40
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Неизвестное количество параметров представляется атрибутом [vararg].

Можно поподробнее? (я пишу без MFC)

Vi2>А значения по умолчанию для неизвестных параметров — это что-то новенькое и требует раскрытия или хотя бы примера для понимания.

Уточнение: неизвестное количество параметров и значения по умолчанию — не одновременно, а в двух разных методах.
Re[3]: Проблема с IDispatch
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.05.06 07:11
Оценка:
Здравствуйте, -realex-, Вы писали:

Vi2>>Неизвестное количество параметров представляется атрибутом [vararg].

R>Можно поподробнее? (я пишу без MFC)

Поиск здесь на сайте или в MSDN.

R>Уточнение: неизвестное количество параметров и значения по умолчанию — не одновременно, а в двух разных методах.


Неизвестное количество параметров — это атрибут [vararg] в описании метода, значения по умолчанию — атрибуты [optional] для VARIANT-ов и [defaultvalue] для остальных типов в описании параметра.

Примеры (от балды):
interface IVAR : IDispatch{
    [id(1), vararg] HRESULT PostData([in] SAFEARRAY(VARIANT) *param);
    [id(6)] HRESULT GeomData([in] IDispatch* ObjDC, [in,optional] VARIANT vPoint, [in,defaultvalue(0.0)] float fAngle);
};

Использование:
objVar.PostData "x=", x, "y=", y
objVar.GeomData objDC, "ZERO", 45.0
objVar.GeomData objDC, , 30.0
objVar.GeomData objDC, basePoint
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.