![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Гость_Саша_* |
![]()
Сообщение
#1
|
Гости ![]() |
Я использую ActivX компонент браузера. И хочу получать активный элемент. Для этого выполняю следующие действия:
CODE QAxObject *Doc = pwb->querySubObject("Document"); QAxObject *activeElement = Doc->querySubObject("activeElement"); //... некоторые действия delete activeElement; delete Doc; После этого кода память и утекает. Почему? Я же вроде всё, что взял удалил. Причём, что интересно, если брать только документ, память не утекает. |
|
|
![]() |
Гость_Саша_* |
![]()
Сообщение
#2
|
Гости ![]() |
Я вот думаю, может можно получить активный элемент не ф-ей querySubObject, а какой-нибудь другой? Только пока не знаю как.
|
|
|
Гость_Саша_* |
![]()
Сообщение
#3
|
Гости ![]() |
Если кому интересно, то я кажется нашёл.
Во-первых с версии 3.3.5 этого глюка наверное нет. А я работаю с 3.3.4. Во-вторых глюк у них в деструкторе, точнее в ф-ии clear(). см: http://trolltech.com/developer/resources/n.../changes-3.3.5/ Fixed a bug where QAxObject::clear() did not reset the metaobject when it was cached. Мне пришлось извращаться и написать свой querySubObject, в котором я запрещаю для полученого объекта кэшировать. Код примерно следующий: CODE #include <qdict.h> class QAxMetaObject; struct querySubObjectEx { QAxObject *operator ()( QAxBase *objParent, const QCString &name, const QVariant &v1 = QVariant(), const QVariant &v2 = QVariant(), const QVariant &v3 = QVariant(), const QVariant &v4 = QVariant(), const QVariant &v5 = QVariant(), const QVariant &v6 = QVariant(), const QVariant &v7 = QVariant(), const QVariant &v8 = QVariant() ) { QAxObject *obj = objParent->querySubObject( name, v1, v2, v3, v4, v5, v6, v7, v8 ); if( obj!=NULL ) { class QAxBasePrivate { public: QDict<QAxEventSink> eventSink; bool useEventSink :1; bool useMetaObject :1; bool useClassInfo :1; bool cachedMetaObject :1; bool initialized :1; bool tryCache :1; IUnknown *ptr; IDispatch *disp; QMap<QCString, bool> *propWritable; QAxMetaObject *metaobj; }; QAxBasePrivate *pd = (QAxBasePrivate*)(((QAxBase*)obj)->d); pd->tryCache = 0; } return obj; } }; Использовать можно, например, так: querySubObjectEx()(Document,"activeElement"); |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.3.2025, 14:51 |