Re[5]: Property для ActiveX объекта
От: Vi2 Удмуртия http://www.adem.ru
Дата: 06.07.04 04:08
Оценка:
Здравствуйте, larisa, Вы писали:

L>    IDMEMBER_MATH_PROP_GET = 6,
L>    IDMEMBER_MATH_PROP_SET = 7,

    IDMEMBER_MATH_PROP = 6,

Свойства должны иметь один DISPID на оба способа: как get, так и set/put (так же как и putref).

L>    Math::GetIDsOfNames(...)
L>{
L>static MEMBERDESC rgmdCPoint[] = {
L>    {OLESTR("Add"),    IDMEMBER_MATH_ADD,   NULL,   0},
L>    {OLESTR("Sub"),    IDMEMBER_MATH_SUB,   NULL,   0},
L>    {OLESTR("Mul"),    IDMEMBER_MATH_MUL,   NULL,   0},
L>    {OLESTR("Div"),    IDMEMBER_MATH_DIV,   NULL,   0},
L>    {OLESTR("Shw"),    IDMEMBER_MATH_SHW,   NULL,   0}

    {OLESTR("Prop"),    IDMEMBER_MATH_PROP,   NULL,   0}

GetIDsOfNames должна реализовать соответствие имен и их DISPIDов независимо от типа функции (метод или свойство). Фактический вызов определяется клиентом.

L>    Math::Invoke(DISPID dispidMember,...,unsigned short wFlags,...)

Вот эта функция и выполняет всю работу. wFlags говорит, что за функциональность требуется от имени, соответствующему dispidMember.

L>    switch(dispidMember){
...
    case IDMEMBER_MATH_PROP:

    if( (wFlags & (DISPATCH_METHOD | DISPATCH_PROPERTYGET)) != 0 )
    {
        // GET свойство - обработка

        // обязательно зполнить pvarResult, если он представлен
        break;
    }
    if( (wFlags & DISPATCH_PROPERTYPUT) != 0 )
    {
        // PUT свойство - обработка

        break;
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.