ActiveX & IE Param tag

Тема в разделе "WASM.WIN32", создана пользователем infern0, 6 дек 2004.

  1. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    Проблема - есть activex и html страничка, использующая этот activex. Хочется в коде страницы написать вот так:

    <OBJECT

    ID="test"

    CLASSID="CLSID:1FB2094D-A5BB-45B3-ADEB-430721ACA618"

    HEIGHT=300

    WIDTH=300>

    <PARAM NAME="TestProperty" VALUE="test value"/>

    </OBJECT>

    однако значение в проперти не присваивается (метод set не вызывается). В разных источниках есть ссылки что в таком случае activex должер реализовывать интерфейсы IObjectSafety и/или IPropertyBag. Реализовал оба. Результат нулевой. Если бы кто поделился рабочим куском кода, который нормально понимает инициализацию через тег PARAM, моей благодарности не было бы границ. В разумных пределах.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Эта косая тут случайно?
     
  3. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    это не помогает. Просто в разных местах (сырцы страниц) встречал и с чертой и без. Примеры из мсдн работают и так и так.
     
  4. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    разобрался. В моем случае надо было добавить в определение класса
    Код (Text):
    1.  
    2. class ATL_NO_VTABLE Caxtest :
    3. ...
    4. public IPersistPropertyBagImpl<Caxtest>
    5. ...
    6.  


    и самое главное - переписать функции
    Код (Text):
    1.  
    2. STDMETHOD(Load)(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
    3. {
    4.     VARIANT v;
    5.     v.vt = VT_BSTR;
    6.  
    7.     HRESULT res = pPropBag->Read(L"TestProperty", &v, pErrorLog);
    8.     if( res == S_OK)
    9.         put_TestProperty(v.bstrVal);
    10.  
    11.     return S_OK;
    12. }
    13.  
    14. STDMETHOD(Save)(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
    15. {
    16.     VARIANT v;
    17.     v.vt = VT_BSTR;
    18.  
    19.     get_TestProperty(&v.bstrVal);
    20.     pPropBag->Write(L"TestProperty", &v);
    21.  
    22.     return S_OK;
    23. }
    24.  


    Самое противное то, что они в IPersistPropertyBagImpl по дефолту реализованы пустыми. Лучше бы их там вообще не реализовывали, тогда хотя-бы компилятор ругался бы что он cannot instantiate abstract class. А так все тихо и ничего не работает :)